模型训练时loss出现Nan的原因分析

  • 下面的分析都是基于tensorflow
  • 数据不正确
    • 比如说我们处理的实际是一个N分类问题的时候,在tensorflow中,我们计算cross entropy的时候将其当作一个M分类问题。如果N>M, 则在计算loss的时候不会报错,计算得到的loss直接就是NAN
  • 学习率过大
    • 有时候学习率过大也会导致NAN,为了判别这种错误,我们只需要将学习率设置为0,看是否会继续出现NAN,如果还会出现NAN,则可以排除这种错误。
  • 激活函数有误
    • 比如我们使用 x 1 2 x^{\frac{1}{2}} x21,作为激活函数的时候,其在x<=0处是不可导的,此时也会产生NAN的问题。
    • 上述的例子也说明了,当我们在计算l2loss的时候为何不去开根号,而是保留平方的形式。
  • 数据没有归一化
    • 当我们做一个regression任务的时候,如果prediction没有归一化的话,可能会导致prediction值过大,在计算loss的之后容易产生过大的loss值,而导致梯度爆炸,出现NAN的情况。
  • 出现一些异常操作
    • 比如出现除以0,log 0等操作会导致NAN。比如说,我们在归一化的时候,分母是正样本的总数,但是batch内如果没有正样本呢?这时候我们就需要加入一个小的平滑项,或者是判断,如果是0,返回一个0.0。
  • 。。。待续。
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值