2017-08-25 108 views
0

我正在訓練11層完全卷積網絡。輸入是圖像480x640x1,輸出標籤也是圖像480x640x1。對於培訓,我正在使用sparse_softmax_cross_entropy_with_logits()。但我gettins的損失值是NaN。我附上我的代碼片段以供參考。Tensorflow損失值是nan with sparse_softmax_cross_entropy_with_logits()

x=tf.placeholder(tf.float32,(None,480,640,1)) 
y=tf.placeholder(tf.int32,(None,480,640,1)) 
logits=Model1(x) 
loss=tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=tf.squeeze(y,squeeze_dims=[3]))) 
optimizer=tf.train.AdamOptimizer(learning_rate=lr) 
Trainables=optimizer.minimize(loss) 

所以型號1返回形狀(6,480,640,1)的張量(批次大小爲6)和y佔位符是(6,480,640,1)。如何解決損失張量得到的NaN值?

回答

0

爲什麼你正在南有些最初的想法:

  1. 檢查你的學習速度,儘量將其降低到一些較小的值,如1e-5,看看它是如何去。這可能是因爲你的學習速度比較大。
  2. 剪下梯度tf.clip_by_value以防止過於激進的更新。
  3. 什麼是您正在使用的激活功能?如果您有11層,您可能需要將tf.nn.relu作爲激活功能。
  4. 您的計算圖表可能有問題,您可以通過將tf.check_numerics添加到每個圖層來測試它,並查看NaN是否來自特定圖層。