ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-20 20:03:47  阅读:136  来源: 互联网

标签:loss None embeddings Keras Nan 模型 nan 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有