在Pytorch中调用optimizer.step后某些网络参数可能变成nan的主要原因是什么?

What are the main reasons why some network parameters might become nan after calling optimizer.step in Pytorch?

我想了解为什么我的 Pytorch 神经网络中的一个或两个参数在调用 optimizer.step() 后偶尔会变成 nan。

我已经在调用 .backward() 之后和调用优化器之前检查了梯度,它们既不包含 nan 也不是很大。我正在做渐变剪裁,但我不认为这是负责任的,因为渐变在剪裁后看起来仍然很好。我到处都在使用单精度浮点数。

这种行为每十万次左右随机发生一次,事实证明很难调试。不幸的是,代码太长,无法在此处重现,而且我无法在更小的示例中重现该问题。

如果有人可以提出我上面没有提到的可能的问题,那将非常有帮助。

谢谢!

这最终是我的无知:梯度中有 Infs 逃避了我的诊断代码,因为我没有意识到 Pytorch 的 .isnan() 方法没有检测到它们。