报错:
- RuntimeError: Function ‘MulBackward0’ returned nan values in its 0th output.
- RuntimeError: Function ‘ExpBackward0’ returned nan values in its 0th output.
- 以及其他的nan错误
以此代码为例:
out = model(input)
pred = out ** (1/4)
loss = 2*nn.MSELoss()(pred ,y)+0.1*nn.L1Loss()(pred ,y)
loss.backward()
optimizer.step()
怎么定位bug位置?
在loss.backward()后加入如下代码
loss.backward()
for name, param in model.named_parameters():
if param.grad is not None and torch.isnan(param.grad).any():
print("nan gradient found")
print("name:",name)
print("param:",param.grad)
raise SystemExit
打印出反向传播的梯度为NaN的模块名称和参数.
1.找到与之相关的Loss函数,
分别令这些Loss为零
out

博客介绍了在PyTorch中遇到RuntimeError: Function ‘MulBackward0’ 和 'ExpBackward0'返回nan值的问题,以及如何定位和解决这类bug。通过检查Loss函数,置零Loss并分析变量,发现问题是由于特定条件下的梯度导致的NaN。总结指出,NaN问题通常与函数的定义域有关,如log(x)、1/x、x^41等,需要关注导数的定义域。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



