我正在使用TensorFlow,并且修改了教程示例以拍攝RGB圖像。該算法在新圖像集上開(kāi)箱即用,直到突然之間(仍然收斂,通常精度約為92%),由于ReluGrad收到非限定值的錯(cuò)誤而崩潰。調(diào)試表明,直到突然之間,由于不明原因,該數(shù)字都沒(méi)有異常發(fā)生,引發(fā)了錯(cuò)誤。新增中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())作為每個(gè)循環(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,但是由于本教程代碼沒(méi)有進(jìn)行任何除法或類似運(yùn)算,因此我看不到其他解釋,這是因?yàn)閮?nèi)部TF代碼。我對(duì)此一無(wú)所知。有什么建議么?該算法收斂良好,在我的驗(yàn)證集上的準(zhǔn)確性穩(wěn)步提高,在迭代8600時(shí)達(dá)到了92.5%。
3 回答

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
實(shí)際上,事實(shí)證明這是愚蠢的。我發(fā)布此消息是為了防止其他人遇到類似錯(cuò)誤。
cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
實(shí)際上是計(jì)算交叉熵的一種可怕方法。在某些樣本中,某些類可以在一段時(shí)間后確定地排除在外,導(dǎo)致該樣本的y_conv = 0。這通常不是問(wèn)題,因?yàn)槟鷮?duì)此不感興趣,但是通過(guò)在其中寫入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)))
解決了我所有的問(wèn)題。
- 3 回答
- 0 關(guān)注
- 735 瀏覽
添加回答
舉報(bào)
0/150
提交
取消