最近在复现一个图像分类的模型,用的是PyTorch 2.0,数据集是自己爬的,大概两万张图。训练前几个epoch都正常,loss稳步下降,但到第5个epoch左右loss突然变成nan,准确率也崩了。试过调小学习率、换Adam和SGD、加梯度裁剪,甚至把batch size降到8,还是会在差不多的地方炸掉。检查过数据没有损坏的图片,输入也做了归一化。网络结构里有一些自定义的层,不确定是不是梯度爆炸或者除零的问题。想问下大家一般怎么定位这种nan的来源?有没有什么调试技巧或者工具推荐?真的卡了好几天了,救救孩子。
楼主
14天前
PyTorch训练时loss突然变成nan,换了几个优化器都没用,到底哪里出了问题?
请 登录 后发表回复
全部回复
共 1 条
2楼
14天前
第5个epoch才炸,大概率不是学习率的问题,感觉像是某条数据或者某个中间激活值在特定阶段跑飞了。建议用torch.autograd.set_detect_anomaly(True)跑一遍,虽然慢但能直接定位到出nan的那个算子。另外重点查一下自定义层里的除法和log操作,分母加个eps试试,很多时候就是某个batch里出现了极小的值导致除零。