其他分享
首页 > 其他分享> > Keras模型训练过程中loss为Nan情况分析与处理

Keras模型训练过程中loss为Nan情况分析与处理

作者:互联网

情景:

推荐召回模型训练,开始的几个epoch损失正常下降,在到某个epoch下loss突然为nan,但模型仍在继续training,最终在模型预测时,结果都为零。

查阅相关资料,可能的原因如下:

1)训练集中可能出现为NAN的特征;

2)自定义loss函数中,会存在分母为零的异常,可以加入微小的长度以保持其稳定性;

3)超参的设置不合理,如优化器、学习率等,个人感觉learning rate影响较大,可以设置为自适应lr以延缓loss为nan的情况;层数太多或学习率太高梯度下降时造成dead neuron

4)可能设置了过多的BatchNorm层,可以查看该层的输出是否有nan数据;由于训练数据会导致移动均值和方差为nan,产生适得其反效果

建议解决方案:

1)查看数据异常

在CPU模型下运行,看看出错信息,使用GPU做计算不会报此类具体的错误,非常重要!

2)NaN具有传递性

训练的时候,如果某个地方炸了或者发生了除零错,在设备上是不会触发中断的。这个时候如果污染了你的参数,会导致一部分或者全部参数数值变成NaN。然后后面的batch就全是NaN了,然后这组模型的网络权重参数就废了。

3)初始化设置不合理

文本在embedding操作时,使用了默认参数进行初始,

tf.keras.layers.Embedding(
    input_dim,
    output_dim,
    embeddings_initializer="uniform",
    embeddings_regularizer=None,
    activity_regularizer=None,
    embeddings_constraint=None,
    mask_zero=False,
    input_length=None,
    **kwargs
)

可以尝试调整embeddings_initializer参数,embeddings_initializer=keras.initializers.TruncatedNormal(stddev=0.02),本人在更改之后,一切回归正常

标签:loss,None,embeddings,Keras,Nan,模型,nan,NaN
来源: https://www.cnblogs.com/demo-deng/p/16394532.html