最近在用PyTorch复现一个简单的图像分类模型,训练到第3个epoch左右loss突然变成NaN,梯度也爆了。我检查了学习率(1e-3)和输入归一化都没问题,数据里也没有脏样本。奇怪的是,我把同一套逻辑用TensorFlow 2.x写了一遍,跑下来完全正常,loss稳稳下降。想问下大家,PyTorch里有没有什么默认行为容易导致这种数值不稳定?比如自动混合精度、某些优化器的eps设置,还是说我对动态图的理解有坑?实在有点迷茫,求指点。
楼主
26天前
PyTorch训练时loss突然变NaN,换TensorFlow又正常,是我代码写错了吗?
请 登录 后发表回复
全部回复
共 1 条
2楼
22天前
PyTorch和TF在loss缩放、梯度裁剪的默认行为上确实不太一样,TF的Keras里很多优化器自带梯度裁剪或者对极端值更宽容。你可以先试试在PyTorch里加torch.nn.utils.clip_grad_norm_,再把优化器的eps从默认1e-8调到1e-6左右看看。另外检查下有没有在loss里用了log或除法,动态图下这些操作对数值很敏感,TF静态图可能帮你兜住了。