调试 PyTorch 代码和调试普通 Python 代码类似,但还需要注意张量计算、GPU、梯度、维度等深度学习特有问题的排查。下面从基础 → 进阶 → 常见坑系统讲一下。
print(最常用)print(x.shape, x.dtype)
print(loss.item())
✅ 重点打印:
.shape.dtype.deviceloss.item()(不要直接 print(loss))pdbimport pdb
pdb.set_trace()
或:
python -m pdb train.py
常用命令:
n:下一步s:进入函数c:继续p x:打印变量✅ 最推荐方式(效率高)
x = model(input)
print(x.shape, x.device, x.dtype)
常见错误:
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
x = x.to(device)
✅ 错误示例:
model.cuda()
x = x.cpu() # ❌
for name, param in model.named_parameters():
if param.grad is not None:
print(name, param.grad.norm())
常见问题:
grad = None(未参与计算图)torch.autograd.detect_anomalywith torch.autograd.detect_anomaly():
loss.backward()
能帮你定位:
with torch.no_grad():
y = model(x)
适合:
RuntimeError: size mismatch
✅ 解决:
print(x.shape)
print(out.shape)
print(torch.isnan(x).any())
常见原因:
RuntimeError: a leaf Variable that requires grad is being used in an in-place operation
✅ 避免:
x = x + 1 # ✅
x += 1 # ❌(某些情况)
检查:
for x, y in dataloader:
x, y = x.to(device), y.to(device)
optimizer.zero_grad()
out = model(x)
loss = criterion(out, y)
loss.backward()
optimizer.step()
print(loss.item())
torchsummarytensorboardwandbtorchinfo如果你愿意,可以把具体报错信息或代码片段发给我,我可以直接帮你定位问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。