tensorflow训练网络时loss出现nan值,准确率为0的问题解决方法(尝试)

问题:

在使用tensorflow训练网络的时候,发现每次一个batch训练时,它的loss都为nan,导致准确率都为0。

tensorflow训练网络时loss出现nan值,准确率为0的问题解决方法(尝试)

nan是代表无穷大或者非数值,一般在一个数除以0时或者log(0)时会遇到无穷大,所以你就要想想是否你在计算损失函数的时候,你的网络输出为0,又计算log,从而导致出现nan。


网上也有很多原因的解释,比如学习率过大,batch过大,或者本身数据就很脏等等原因,我尝试减小学习率,从0.001依次减小10倍,都减小到了1000倍,还是会出现nan.

我又减小了batch_size,结果还是没有解决。

然后我参考了这篇博客http://blog.sina.com.cn/s/blog_6ca0f5eb0102wr4j.html#cmt_5A0D972D-72F73880-BE365276-926-938

说了可能是由于log(0)的缘故,所以我就在我计算损失函数的过程中遇到的log的地方都加了clip.

比如tf.log(tf.clip_by_value(tf.sigmoid(self.scores),1e-8,1.0)

加了之后,继续训练,发现损失loss就不是nan了。

tensorflow训练网络时loss出现nan值,准确率为0的问题解决方法(尝试)