工程实践_深度学习训练模型时Loss出现NAN的原因及解决办法

原因1:梯度爆炸

产生原因:学习率过大。

解决方法:
3. 数据归一化(减均值,除方差,或者加入normalization:BN,L2 norm等)。
4. 更换参数初始化方法(对于CNN,一般用xavier或者msra的初始化方法)。
5. 减小学习率,减小Batch size。
6. 加入梯度截断(gradient clipping)。

原因2:网络结构设计问题

解决方法:

  1. 加如BN层进行归一化。
  2. 修改网络结构(如增加网络宽度、增加网络层数)。
  3. 改变层的学习率,每个层都可以设置学习率,可以尝试减小后面层的学习率。

原因3: 不同框架迁移时的代码问题

解决方法:

  1. debug不同框架下产生的代码错误。
  2. 不同框架下的函数意义不同,需要准确迁移。

原因4: 数据集的问题

1.可能数据集中存在脏数据。从而导致无法训练的问题。

解决方法:

通过设置batch_size = 1,shuffle = False,一步一步地将sample定位到了所有可能的脏数据,并且删掉。

2.可能是数据集label数量和模型中设置的label数量不一致。

原因5:损失函数设置问题

例子:

在TensorFlow中,如果使用交叉熵:cross_entry = -tf.reduce_sum(tf.log(y_conv))的话,最后softmax输出层的y_conv取值范围在[0,1]中是允许取0的,但是log(0)很有可能会导致NaN的出现。

所以在设置损失函数时要注意细节。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rocky Ding*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值