2017-04-06 47 views
0

我在訓練的模型中運行NaN值。從GPU運行並使用多線程提供隊列時,張量流中的NaN值

我有2個tensorflow隊列。第一個由獨立的加載程序線程提供,第二個線程從第一個隊列讀取數據,執行預處理,並加載到第二個隊列中。

這一切都發生在CPU上。然後模型從第二個隊列中讀取一批並在GPU上進行訓練。

經過可變數量的步驟後,我得到了NaNs,通常爲10-20。

我可以一邊用2種方法步驟的問題:在CPU上

  1. 運行。相同的代碼在CPU上運行良好。
  2. 刪除線程,相同的代碼,而不是在線程中運行加載器和預處理器,只需在訓練步驟之前按順序執行這兩個步驟。

所以這個問題只有當我使用多線程訪問不同設備的隊列時纔會遇到。

或者看來,我至今未能成功地將問題提煉成最小的測試用例。這個簡單的測試似乎工作。

想知道是否有任何已知的相關問題。

我已經在2個系統上運行了TF 1.0.1和運行1.1.0-rc1的系統。我已經嘗試過CUDNN 5和CUDNN 6庫。

+0

我還沒有在一個有限的測試案例中成功地重現了這個問題,但似乎是我已經將一些圖像預處理操作附加到了GPU上,但是我正在從基於cpu的隊列中提供它們。這並沒有導致失敗,但我得到了奇怪的數值不穩定性,最終導致了NaN。我可以像上面提到的那樣解決問題,在沒有線程/隊列的情況下在GPU上運行,完全在CPU上運行,或者我的最終解決方案:使用Device('/ cpu:0')將圖像處理操作映射到CPU: ' –

回答

0

此問題似乎與在GPU上定義的某些tf.image處理函數有關,但將它們從CPU隊列中的數據提供給它們。我不希望這會成爲一個問題,但只要我使用一切正常工作將這些操作綁定到CPU。

相關問題