2017-08-02 14 views
0

ことをしようと誰もが例で与えられるような結果を正確に再現できるように、ネットワークを訓練する前に... ...乱数生成はどのようにして再現性を保証しますか?

rng(2016) % For reproducibility 
convnet = trainNetwork(trainDigitData,layers,options); 

Transfer Learning with MATLab私が言うコードの一部に出くわしを読んでいる間コード。 rng(seed_value)関数を使用して擬似乱数を生成すると、結果の全範囲の再現性がどのように向上するかを知りたいですか?

答えて

1

乱数生成ではなく、乱数生成器種子です。

乱数、ちょうど擬似乱数、通常は初期値が必要な複雑な数学関数から生じる、ほぼランダムに振舞う数はありません。多くの場合、コンピュータはPCのマイクロチップのタイムレジスタからこの初期値を取得し、ランダム性を「保証」します。

ただし、乱数(NNなど)に基づいたアルゴリズムを使用している場合は、結果を共有するときに再現性が問題になることがあります。ランダム性はアルゴリズムの一部であるため、コードを再実行する人は異なる結果を得ることが保証されます。しかし、ランダムに生成された種から始めるのではなく、固定された種から開始するように乱数ジェネレータに指示することができます。これにより、生成された数字はそれらの間でランダムに発生しますが、毎回同じです(たとえば、[3 84 12 21 43 6]はランダムな出力になる可能性がありますが、tiは常に同じです)。

NNのシードを設定すると、同じデータに対して同じ結果が出力されるので、コードを「再現可能」にすることができます。つまり、他の誰かがあなたのコードを実行して、 。その後、

rand(1,10) 
rand(1,10) 

rng(42) 
rand(1,10) 
rng(42) 
rand(1,10) 

Wikipedia for Pseudo-random number generator

を試してみてください。私はあなたが次のことをしようと提案する試験として

1

いくつかの時間が同じ乱数を使用するのに良いですので、これはあなたがしたい時に種子や発電機が一緒に入力し設定することを

について何MATLAB saysです:

Ensure that the behavior of code you write today returns the same results when you run that code in a future MATLAB® release. 

Ensure that the behavior of code you wrote in a previous MATLAB release returns the same results using the current release. 

Repeat random numbers in your code after running someone else's random number code 

これは種を返すことのポイントであり、同じ乱数を生成します。 MATLABは、2件の良い記事あなたが重みにいくつかのランダムな値を与える初期化段階ではので、重み全て等しいゼロで開始したいいけないdifferent numbers

1

ためrepeating numbers用とでそれを指摘しています。学習プロセスの後半で最小のものを探したり、データをフィードする方法に他のランダムな値が含まれている可能性があります。 したがって、すべてのニューラルネットワークの学習プロセスへの実際の入力は、あなたのデータと乱数ジェネレータです。 それらが同じであれば、すべて同じであるはずです。 'rng'コマンドは乱数ジェネレータをあらかじめ定義された状態にして、同じ番号のシーケンスを生成します。

1

anquegiの答えは、ほとんどあなたの質問に答えるので、この投稿はもう少し詳しく説明しています。

乱数を求めるときはいつも、MATLABが実際に行うことは、分布U(0,1)([0,1]のユニフォーム)を持つ擬似乱数を生成することです。いくつかの決定的式を介して、典型的なものは、同様、Linear congruential generator参照:

X_{n+1} = (a X_{n} + b) mod M 

次いで均一な数はU = X_ {N + 1}/Mによって得られます。

しかし、問題があります.X_ {1}が必要な場合は、X_ {0}が必要です。ジェネレータを初期化する必要があります。これはシードです。これは、X_ {0}が指定されると毎回同じ乱数を描画することを意味します。新しいMATLABインスタンスを開き、randnを実行し、MATLABを閉じてもう一度開き、randnを再度実行してください。それは同じ数字になります。これは、MATLABが開かれたときは常に同じシードを使用するためです。

あなたが​​で行うことは、ジェネレータを「リセット」し、X_ {0} = 2016を置くことで、あなたが求めるすべての数値を知ることができ、結果を再現できるということです。

関連する問題