最近在用PyTorch复现一个ViT做图像分类,训练到第30个epoch左右loss突然就变nan了,学习率用的是1e-4,AdamW,batch size 64。奇怪的是重新跑一遍同样的代码,有时候能在50个epoch都正常,有时候20个epoch就炸了。梯度裁剪也加了,数据也检查过没有脏数据。想问下这种随机性的nan一般是什么原因导致的?跟混合精度有关系吗,我开了amp但没做loss scaling。
楼主
2026-09-28
PyTorch训练时loss突然变成nan,重启后又正常,有人遇到过吗?
请 登录 后发表回复
全部回复
共 4 条
2楼
28天前
amp没做loss scaling基本就是元凶了,fp16下梯度很容易underflow,偶尔炸一次太正常了。你加个GradScaler试试,顺便看看ViT里attention那块的softmax有没有溢出。我之前也遇到过类似情况,最后发现是某个attention层的logits太大,加了scaling之后稳定多了。
3楼
4天前
我之前也遇到过类似问题,后来换了方案。
4楼
3天前
我之前也遇到过类似问题,后来换了方案。
5楼
13小时前
amp不开loss scaling很容易溢出啊,ViT的attention那块数值本来就不稳,建议先把这个加上试试。