私はTensorflowで書かれた非常に単純なNNスクリプトを持っていますが、いくつかの「ランダム性」がどこから来ているのかを調べるのは苦労しています。テンソルフロー勾配の決定の決定性?
私が訓練し、そして最初の反復のために、すべてが始まることは明らかであるように私は
- ウェイト、
- グラデーション、
- Logits私のネットワークの
を記録しています同じものを外す。私は、データの読み込み方法とネットの重みを初期化するためのSEED値の両方のSEED値を持っています。私は決して変化しません。
私の問題は、すべての再実行の2回目の繰り返しで、私はの勾配が発散する(少しずつ、例えば1e-6程度のように)見えることです。しかし、時間が経つと、これはもちろん反復不可能な振る舞いにつながります。
これは何故ですか?私は、中にシングルスレッドで、あなたはCPU(export CUDA_VISIBLE_DEVICES=
)にネットワークを実行する場合は、確定的な結果を得ることができる良いチャンスがあります...ランダムのいずれかの可能なソースから来るかもしれない場所を知る
おかげ
GPUを使用していますか? GPUのさまざまなオペレーションは、CUDAアトミック(tf.reduce_sumなど)の使用により非決定的です –
また、非決定的な結果をもたらすいくつかのSSE最適化があります。最適化せずにTensorFlowをコンパイルしてみることもできますケース(詳細 - http://blog.nag.com/2011/02/wandering-precision.html) –
こんにちは@YaroslavBulatovはい、私は確かにGPUを使用しています。 – Spacey