深度学习网络训练中出现nan的原因分析

报错:

nan:Not a Number

该错误导致的后果:造成训练准确率的断崖式下跌

错误原因分析:

1)在loss函数中出现nan

  • 出现原因:一般是因为tf中的log函数输入了‘负数’或‘0’值(出现log(0)*0的情况)
  • 解决方法:使用tf.clip_by_value限制tf.log的输入值,例如:
cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y,1e-8,tf.reduce_max(y))))

cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y,1e-8,1e+100)))

cross_entropy = -tf.reduce_sum(y_*tf.log(y+1e-8))

safe_log = tf.clip_by_value(some_tensor, 1e-10, 1e100)    

2)在更新网络时出现nan

  • 出现原因:一般是学习率设置过高导致的(-->梯度值过大-->梯度爆炸)
  • 解决方法:调低学习率

3)脏数据

  • 出现原因:训练数据中存在脏数据,不适应当前网络,输出错误数值
  • 解决方法:人工清理数据

更多细节可参考:

blog.sina.com.cn/s/blog_6ca0f5eb0102wr4j.html#cmt_5A0D972D-72F73880-BE365276-926-938

训练深度学习网络时候,出现Nan是什么原因,怎么才能避免? - 知乎

训练神经网络循环3000次后,交叉熵损失为nan原因? - 知乎

训练深度学习网络时候,出现Nan是什么原因,怎么才能避免?——我自己是因为data有nan的坏数据,clear下解决 - bonelee - 博客园

  

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值