【深度学习】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较大、学习率较大、数据特征之间值的差异较大
  • 数据本身有缺失值
相关推荐
starrysky81023 分钟前
Hermes Agent 升级 v0.23.0:工具恢复、长会话与分层验收
人工智能
武子康33 分钟前
语音聊了十分钟,为什么不能拿转写分钟算费用?
人工智能·深度学习·agent
武天旭1 小时前
AI安全--AI大模型的隐私保护解析
人工智能·深度学习·安全·机器学习
aifannihao1 小时前
AI 学习第 5 课:手推逻辑回归与交叉熵,L2 把可分数据的权重按住
人工智能·机器学习·逻辑回归·numpy·学习路线
IHaveADiscovery1 小时前
无痛让AI由Markdown转Word:Pandoc模板了解一下
人工智能·word·markdown
慢慢来不要急2 小时前
Anthropic 不用 Git 了,GitHub 也在为智能体重建存储 · 11-06
人工智能·开发工具
宅小年2 小时前
为什么你的 Grok Bot 总走偏?教你写一个真正好用的 Bot 模板
人工智能
明月_清风2 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
神鹰手哥_起飞版2 小时前
一句「你确定吗」能让 AI 把白的说成黑的?我用直接用豆包来做实验
人工智能
afumu2 小时前
把五个网页版 AI 拉进同一个群聊:不用 API key 的多 Agent 编排
人工智能·chrome·typescript