为了账号安全,请及时绑定邮箱和手机立即绑定

Tensorflow NaN错误?

Tensorflow NaN错误?

交互式爱情 2019-11-27 13:18:10
我正在使用TensorFlow,并且修改了教程示例以拍摄RGB图像。该算法在新图像集上开箱即用,直到突然之间(仍然收敛,通常精度约为92%),由于ReluGrad收到非限定值的错误而崩溃。调试表明,直到突然之间,由于不明原因,该数字都没有异常发生,引发了错误。新增中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())作为每个循环的调试代码,将产生以下输出: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由于我的值都不是很高,因此发生NaN的唯一方法是处理不正确的0/0,但是由于本教程代码没有进行任何除法或类似运算,因此我看不到其他解释,这是因为内部TF代码。我对此一无所知。有什么建议么?该算法收敛良好,在我的验证集上的准确性稳步提高,在迭代8600时达到了92.5%。
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

实际上,事实证明这是愚蠢的。我发布此消息是为了防止其他人遇到类似错误。


cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))

实际上是计算交叉熵的一种可怕方法。在某些样本中,某些类可以在一段时间后确定地排除在外,导致该样本的y_conv = 0。这通常不是问题,因为您对此不感兴趣,但是通过在其中写入cross_entropy的方式,该特定样本/类的结果为0 * log(0)。因此,NaN。


替换为


cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y_conv,1e-10,1.0)))

解决了我所有的问题。


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 697 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信