2017-03-24 87 views
2

自從幾天以來我就面臨這個問題。我不知道我犯了什麼錯誤。我的代碼是冗長的,無法生育這裏的一切用tensorflow訓練神經網絡後產生Nans

下面是結果在第一種情況:

Accuracy: 0.1071 Error: 1.45003 
Accuracy: 0.5149 Error: 0.259084 
Accuracy: 0.7199 Error: 0.197301 
Accuracy: 0.7934 Error: 0.138881 
Accuracy: 0.8137 Error: 0.136115 
Accuracy: 0.8501 Error: 0.15382 
Accuracy: 0.8642 Error: 0.100813 
Accuracy: 0.8761 Error: 0.0882854 
Accuracy: 0.882 Error: 0.0874575 
Accuracy: 0.8861 Error: 0.0629579 
Accuracy: 0.8912 Error: 0.101606 
Accuracy: 0.8939 Error: 0.0744626 
Accuracy: 0.8975 Error: 0.0775732 
Accuracy: 0.8957 Error: 0.0909776 
Accuracy: 0.9002 Error: 0.0799101 
Accuracy: 0.9034 Error: 0.0621196 
Accuracy: 0.9004 Error: 0.0752576 
Accuracy: 0.9068 Error: 0.0531508 
Accuracy: 0.905 Error: 0.0699344 
Accuracy: 0.8941 Error: nan 
Accuracy: 0.893 Error: nan 
Accuracy: 0.893 Error: nan 

我曾嘗試過各種東西,但未能找出在我犯了一個錯誤。

1)更改交叉熵的計算,以不同的東西

self._error = -tf.reduce_sum(y*pred+ 1e-9)) 
self._error = -tf.reduce_sum(y*pred) 
self._error = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred, labels=y)) 
self._error = tf.reduce_mean(-tf.reduce_sum(y * tf.log(pred+1e-8),reduction_indices=1)) 

out = tf.nn.softmax_cross_entropy_with_logits(logits = pred, labels=y) 
self._error= tf.reduce_mean(out) 

我已經嘗試了所有的優化 - SGD - 亞當 - adagrad - rmsprop

我都用了默認提供的優化通過張量流動並手動應用不同的參數。
我試圖1.0和0.0

重量::指向我已經即使學習速率小到0.00001

偏置檢查
與tf.truncated_normal_initializer(STDDEV = 0.1初始化, D型= tf.float32)

網絡:
FC784 - FC256 - FC128 - FC10
我也嘗試過不同的變體。

激活函數:
- RELU - 雙曲正切 - 漏RELU tf.maximum(輸入,0.1 *輸入)

數據:
MNIST數據集通過用255除以歸一化數據集來自Keras。

我知道這個問題是在各種各樣的stackoverflow問題,我已經嘗試了所有的方法建議der和我的知識,他們都沒有幫助過我。

+0

由於某種原因,有時設備會給出「無」的答案,這很正常,但如何處理? NAN等於「尚未準備好」,「資源繁忙」,「值溢出」等。所有的資源訪問都得到了'延遲',例如:你在計算機上得到延遲'1/CPU_CLOCK'。檢查您的設備功能... ** 0/None = NAN ** – dsgdfg

+0

我已經在3-4個系統中運行代碼。我用過cpu和gpu,情況也是一樣。 –

回答

0

從上面的信息很難說出什麼地方出了問題。是的,調試神經網絡可能非常繁瑣。幸運的是,Tensorflow Debugger是一款出色的工具,可以讓您在每次迭代中逐步瀏覽網絡並分析您的權重。

在tfdbg中運行以下命令以獲取圖中顯示的第一個naninf值。

run -f has_inf_or_nan 
0

讓你的標籤肯定不超過-1的的-SOFTMAX-輸出數。在這種情況下,sigmoid_cross_entropy_with_logits將產生NaN而不是產生錯誤。通常,如果標籤的範圍是1..N,softmax索引將從0開始運行,則會發生這種情況。N-1