【深度学习】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较大、学习率较大、数据特征之间值的差异较大
  • 数据本身有缺失值
相关推荐
Elastic 中国社区官方博客几秒前
开始使用 Elastic Agent Builder 和 Strands Agents SDK
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
说私域4 分钟前
不同类型企业构建私域流量的必要性及定制开发AI智能名片商城小程序的应用
大数据·人工智能·小程序
专业开发者5 分钟前
蓝牙 ® 技术正逐步在未来的智慧城市中站稳脚跟。
大数据·人工智能·智慧城市
通义灵码6 分钟前
Qoder CLI实战:实现开源应用一键部署
人工智能·cli·一键部署·qoder
云空11 分钟前
《从实验室到生活:Aloha机器人如何重新定义人机协作》
人工智能
测试人社区-小明18 分钟前
涂鸦板测试指南:从基础功能到用户体验的完整框架
人工智能·opencv·线性代数·微服务·矩阵·架构·ux
BB_CC_DD24 分钟前
超简单搭建AI去水印和图像修复算法lama-cleaner(包含网页UI单张操作和代码批量运行)一
人工智能·深度学习
IALab-检测行业AI报告生成26 分钟前
快速了解IACheck AI技术原理:四大核心模块解析
人工智能
CNRio27 分钟前
空间智能:中国数字基建的新引擎与产业变革的深层逻辑
人工智能·科技
泰迪智能科技28 分钟前
案例分享|中山三院医学影像报告辅助生成案例分析
人工智能·深度学习·机器学习