训练模型loss出现NaN

目录

问题描述:

排查问题:

解决问题:

总结:


问题描述:

搭建网络后,loss一直为NAN

排查问题:

  • 调整学习率为0,loss还为NAN---->与学习率无关

  • 模型内关于除、log等可能出现异常的操作,加上 1e-8,loss还为NAN------>基本排除与模型运算有关

  • 排查输入数据,将特征、标签遍历完,未发现异常值与空值

  • 排查导入的词向量模型,发现内部存在大量空值与NAN------>貌似找到问题所在

解决问题:

导入词向量模型后,遍历并去除异常值,重新训练后发现loss回复正常值。解决

 

总结:

loss出现NAN时,一般会首先考虑学习率和batch_size是否设置过大,排除非此问题后,则检查模型内部或输入数据是否有问题。

 

### CDDFuse 模型训练 Loss 出现 NaN 的原因分析 在深度学习模型训练中,Loss 值变为 NaN 是一种常见的问题,可能由多种因素引起。对于 CDDFuse 模型而言,以下是可能导致该现象的主要原因及其对应的解决方案: #### 数据预处理中的异常 如果输入数据存在不合理的数值范围(如无穷大或极小值),可能会导致网络层的计算溢出或下溢,从而引发 Loss 变为 NaN[^1]。 **解决方案:** - 对输入数据进行标准化或归一化操作,确保其分布在合理范围内。 - 使用 `numpy` 或其他工具检查是否存在极端值并剔除这些样本。 ```python import numpy as np def normalize_data(data): mean = np.mean(data, axis=0) std = np.std(data, axis=0) normalized_data = (data - mean) / (std + 1e-7) # 避免分母为零 return normalized_data ``` --- #### 学习率设置过高 过高的学习率会使得梯度更新幅度过大,在反向传播过程中容易造成参数发散,最终使 Loss 趋近于 NaN[^2]。 **解决方案:** - 尝试降低初始学习率,并采用动态调整策略逐步优化收敛速度。 - 如果使用 Adam 等自适应优化器,则可以适当减少 beta 参数来缓解此问题。 ```python from torch.optim import Adam optimizer = Adam(model.parameters(), lr=1e-4, betas=(0.9, 0.99)) ``` --- #### 权重初始化不当 错误的权重初始化方式也可能导致神经元激活函数饱和甚至失效,进而影响整个前馈路径上的稳定性[^3]。 **解决方案:** - 更改默认随机分布至 Xavier/He Normal 初始化方法之一以改善这种情况下的表现效果。 ```python import torch.nn.init as init for name, param in model.named_parameters(): if 'weight' in name: init.xavier_normal_(param.data) elif 'bias' in name: init.constant_(param.data, 0.) ``` --- #### Batch Size 过小 当批次大小不足以代表总体特征空间时,每一步 mini-batch 更新都可能存在较大波动性,累积下来便会造成整体不稳定状态而产生 NaN 结果。 **建议措施:** 增加 batch size 至更合适的规模;当然也要注意内存资源限制条件下的可行性权衡考量。 --- ### 总结 通过上述几个方面的排查与修正动作相结合应用之后应该能够有效解决大部分关于 cddfuse 类型项目里遇到类似的 loss 成为了 not-a-number 的难题状况发生几率大大减低下去很多程度上提高了系统的健壮性和可靠性水平等方面都有所体现出来良好成果展示给大家参考借鉴之用!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值