2017-04-25 6 views
1

私はMNISTデータの学習にTensorflowを使用しています。 は、バッチ処理のために私はこのような単一画像からのバッチを作成します。私はサイズ1の(テスト用)バッチを作成し、TensorBoardでそれらの画像を見ると、私が見ることができるtf.train.batchの出力が確定的でない

​​

ことなく、すべての実行で、すべての画像他のランのように同じです。 これらは直接シャッフルされませんが、別の画像が含まれることがあります。

私はその操作から決定論的な出力を得ることが期待されますが、そうではありません。たぶん私は何か間違っている(キューを間違って起動するなど)?

+0

もう1つの注意:私はデータをバッチせず、単純に私のネットワークに 'Inputs'リストを提供すると、入力データはすべての実行において確定的です。 – CountVonCount

答えて

5

tf.train.batch()を呼び出すときにnum_threads > 1を設定した場合、これはInputを評価3つのまとまりのないプリフェッチのスレッドを作成し、キューに次の要素を挿入しますので、結果としてプログラムは、非決定論的になります。プリフェッチ・スレッドは調整されていないため、キュー内の要素をエンキューするためにこれらのスレッド間に競合が存在し、キュー要素の順序で非決定論につながります。

設定num_threads = 1は、プログラムの他の部分が確定的であると仮定して、プログラムのこの部分を確定的にする必要があります。しかし、これは弱い保証であり、特に— —キューベースの入力ルーチンでシャッフルを使用するとプログラムが非決定的になります。

+0

実際、プリフェッチには8スレッドを使用します。数を1に減らすと問題が解決します。 その明確な説明をありがとう。 – CountVonCount

関連する問題