我正在使用 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 8600
max W vales: 0.759422 0.295087 0.344725 0.583884
max b vales: 0.110509 0.111748 0.115327 0.124324
Step 8601
max W vales: 0.75947 0.295084 0.344723 0.583893
max b vales: 0.110516 0.111753 0.115322 0.124332
Step 8602
max W vales: 0.759521 0.295101 0.34472 0.5839
max b vales: 0.110521 0.111747 0.115312 0.124365
Step 8603
max W vales: -3.40282e+38 -3.40282e+38 -3.40282e+38 -3.40282e+38
max b vales: -3.40282e+38 -3.40282e+38 -3.40282e+38 -3.40282e+38
由于我的值都不是很高,因此发生 NaN 的唯一方法是处理不当的 0/0,但由于本教程代码不执行任何除法或类似操作,我认为除了这来自内部 TF 代码。
我不知道该怎么办。有什么建议么?该算法收敛得很好,它在我的验证集上的准确率稳步攀升,在迭代 8600 时刚刚达到 92.5%。