You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch代码无法计算x的梯度,报NoneType属性错误求助

问题解决:x.grad为None导致的AttributeError

核心错误原因

你手动设置了loss.requires_grad = True,这完全没必要——loss作为计算图的末端节点,本身就处于梯度追踪链路中,这个多余设置会干扰梯度向x的反向传播。另外你尝试的x.retains_grad()也不需要,因为x已经通过x.requires_grad = True标记为叶子节点,默认会保留梯度。

修正后的代码

epsilon = 0.1
x.requires_grad = True

output = model(x, y)
loss = torch.nn.functional.cross_entropy(output, y)

# 删掉loss.requires_grad = True这一行
loss.backward()

gradient = x.grad
if gradient is not None:
    sign_gradient = gradient.sign()
else:
    print("未计算出x的梯度,请检查模型内部操作")

额外排查点

如果修正后x.grad还是None,检查以下内容:

  • 模型中是否存在阻断梯度传播的操作,比如detach()、torch.no_grad()上下文,或者inplace修改(如x += 1这类操作)。
  • x是否是从无梯度追踪的张量转换而来(比如用numpy()转成数组再转回张量,会丢失梯度追踪)。
  • 确认model的前向传播中,x的输出确实参与了loss的计算,没有被无关操作丢弃。

内容的提问来源于stack exchange,提问作者kicks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:50:55