【深度学习】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较大、学习率较大、数据特征之间值的差异较大
  • 数据本身有缺失值
相关推荐
SQL5 小时前
从 TraeWork 到全新 TRAE:双端融合后,我用 SOLO 模式 20 分钟做了个考研倒计时工具
人工智能
绝望的蛋炒饭5 小时前
长会话的模型选型:缓存命中率如何决定真实成本
人工智能·后端·agent
探索者轻舞5 小时前
Logprobs 零成本测谎仪——从分母抹杀理论到软预警协同裁决
人工智能·深度学习
数聚天成DeepSData5 小时前
Landsat 影像去哪里下载:选景、批量与脚本检索怎么选
人工智能·深度学习·机器学习·数据集·deepsdata
neocheng_5225 小时前
从接待方案到会后待办:如何用 AI 完成一次会务全流程
人工智能
zhiboshequ5 小时前
Ai音视频对话在微信小程序端的技术实现方案
人工智能·微信小程序·live-pusher·live-player·音视频对话
用户302822530685 小时前
一个 Agent 失败,别急着杀掉所有兄弟任务
人工智能·架构
阿明副业观察5 小时前
AI分镜批量生成与画风统一的秘诀
大数据·人工智能·aigc·音视频·ai写作
汤姆宝库5 小时前
长上下文深拆:RoPE外推、稀疏注意力与KV经济学
人工智能
小蒋观天下5 小时前
【无标题】红外补光近距过曝、远距欠曝:导致车牌AI识别失效调试
人工智能·深度学习·数码相机·算法·机器学习·ai大模型