【深度学习】Pytorch训练过程中损失值出现NaN

项目场景

利用Pytorch框架,结合FEDformer开源代码(https://github.com/MAZiqing/FEDformer),将自己的数据集作为输入训练模型。

问题描述

训练过程中,发现打印出来的Train loss, Test loss, Test loss中,Test loss从第一个epoch开始就为nan。

输出中间结果后,发现第一个epoch训练到了第二个batch时,模型输出开始出现了nan。

原因分析

查阅了相关资料,有这样一些说法:

  • 梯度爆炸:batch size较大、学习率较大、数据特征之间值的差异较大
  • 数据本身有缺失值

之后针对数据的缺失值进行了统计,发现并没有缺失值。所以初步认为是发生了梯度爆炸。

随后我做了多组实验,观察每次epoch的每个batch的预测结果是否存在nan:

  • 对比实验a: 不断减小batch size
  • 对比实验b: 不断减小学习率
  • 对比实验c: 减少数据集特征的个数

最终发现,是数据集特征的问题。数据集的某个特征和其他特征数值差异较大,导致模型在反向传播计算梯度的时候计算出的梯度值过大,从而导致了梯度爆炸。

解决方案

经过理论分析,这一列特征对于实验结果的影响不会很大,故直接将这一列特征从数据中删除。之后的实验结果也表明确实是这一列的引入导致了模型训练出现了NaN。

总结

深度学习训练过程中损失值出现NaN的情况:

  • 梯度爆炸:batch size较大、学习率较大、数据特征之间值的差异较大
  • 数据本身有缺失值
相关推荐
上海锝秉工控1 分钟前
省线型增量编码器:用“减法思维“重构工业控制的未来
网络·人工智能·重构
蓝星空20001 分钟前
怎么使用 Image 2 高效生成商业级 AI 图像(GPT-Image-2 全流程实操教程)
人工智能·gpt·ai作画
沉下去,苦磨练!3 分钟前
张量的形状操作以及拼接
人工智能
小黄人软件7 分钟前
Claude和Codex下载离线包 安装遇到问题:windows无法访问指定设备 路径 文件 应用无法打开也无法卸载,解决了
人工智能·microsoft·openai·codex
落叶无情7 分钟前
分析:不上传文档给AI上下文窗口,仅让Ai上网搜索icef认知框架的详情,可以获得比较完整的信息,并可直接进行基本推理的具体机制
人工智能
Hector_zh10 分钟前
逐浪 · 第十一篇: Vibe Coding 下的效率定义与规范建设
人工智能·vibecoding
147API16 分钟前
Claude进入受监管系统前,接入层应该先怎么设计
人工智能
Szime17 分钟前
深智微:面向汽车电子与工业控制的电子元器件原装现货服务商
人工智能·汽车
gis分享者18 分钟前
Claude Code 接入蓝耘 GLM-5.1:终端 AI 编程助手配置实战
人工智能·ai·实战·claude·cc·接入glm
企学宝22 分钟前
央国企数字化培训升级路径:学分制+AI评卷的全新实践
人工智能·企业培训·公司内训