我正在使用TensorFlow,并且修改了教程示例以拍攝RGB圖像。該算法在新圖像集上開箱即用,直到突然之間(仍然收斂,通常精度約為92%),由于ReluGrad收到非限定值的錯誤而崩潰。調(diào)試表明,直到突然之間,由于不明原因,該數(shù)字都沒有異常發(fā)生,引發(fā)了錯誤。新增中print "max W vales: %g %g %g %g"%(tf.reduce_max(tf.abs(W_conv1)).eval(),tf.reduce_max(tf.abs(W_conv2)).eval(),tf.reduce_max(tf.abs(W_fc1)).eval(),tf.reduce_max(tf.abs(W_fc2)).eval())print "max b vales: %g %g %g %g"%(tf.reduce_max(tf.abs(b_conv1)).eval(),tf.reduce_max(tf.abs(b_conv2)).eval(),tf.reduce_max(tf.abs(b_fc1)).eval(),tf.reduce_max(tf.abs(b_fc2)).eval())作為每個循環(huán)的調(diào)試代碼,將產(chǎn)生以下輸出:Step 8600max W vales: 0.759422 0.295087 0.344725 0.583884max b vales: 0.110509 0.111748 0.115327 0.124324Step 8601max W vales: 0.75947 0.295084 0.344723 0.583893max b vales: 0.110516 0.111753 0.115322 0.124332Step 8602max W vales: 0.759521 0.295101 0.34472 0.5839max b vales: 0.110521 0.111747 0.115312 0.124365Step 8603max W vales: -3.40282e+38 -3.40282e+38 -3.40282e+38 -3.40282e+38max b vales: -3.40282e+38 -3.40282e+38 -3.40282e+38 -3.40282e+38由于我的值都不是很高,因此發(fā)生NaN的唯一方法是處理不正確的0/0,但是由于本教程代碼沒有進(jìn)行任何除法或類似運算,因此我看不到其他解釋,這是因為內(nèi)部TF代碼。我對此一無所知。有什么建議么?該算法收斂良好,在我的驗證集上的準(zhǔn)確性穩(wěn)步提高,在迭代8600時達(dá)到了92.5%。
3 回答

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗 獲得超2個贊
實際上,事實證明這是愚蠢的。我發(fā)布此消息是為了防止其他人遇到類似錯誤。
cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
實際上是計算交叉熵的一種可怕方法。在某些樣本中,某些類可以在一段時間后確定地排除在外,導(dǎo)致該樣本的y_conv = 0。這通常不是問題,因為您對此不感興趣,但是通過在其中寫入cross_entropy的方式,該特定樣本/類的結(jié)果為0 * log(0)。因此,NaN。
替換為
cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y_conv,1e-10,1.0)))
解決了我所有的問題。
- 3 回答
- 0 關(guān)注
- 746 瀏覽
添加回答
舉報
0/150
提交
取消