2017-04-25 50 views
1

我使用Tensorflow來學習MNIST數據。 對於批量創建從單個圖像一批這樣的:tf.train.batch輸出不確定性

​​

當我創建一個大小爲1(用於測試)批次,看看TensorBoard那些圖片,我可以看到,並非所有的運行,每一個圖像和其他運行一樣。 他們不直接洗牌,但有時包含另一個圖像。

我期望從該操作獲得確定性輸出,但事實並非如此。也許我做錯了什麼(開始排隊錯誤或類似的東西)?

+0

另一個注意事項:當我不批量處理數據時,只需向我的網絡提供「Inputs」列表,輸入數據在所有運行中都是確定性的。 – CountVonCount

回答

5

如果設置num_threads > 1調用tf.train.batch()時,所產生的程序將是不確定的,因爲這將創建評估Input 3個不協調的預取線程和下一個元素插入到隊列中。由於預取線程不協調,因此這些線程之間存在競爭將隊列中的元素排入隊列,這導致按隊列元素順序的非確定性。

設置num_threads = 1應該使程序的這部分是確定性的,假設程序的其他部分是確定性的。然而,這是一個弱保證,並且在基於隊列的輸入例程中任何使用混洗將使得程序不確定。

+0

的確,我使用8個線程進行預取。將數字減少到1將解決問題! 感謝您的明確解釋。 – CountVonCount