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

问题:

在使用tensorflow训练网络的时候,发现每次一个batch训练时,它的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了。


  • 13
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值