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

PyTorch中对零函数求导触发RuntimeError问题咨询

问题分析与解决方案

报错原因

  • torch.zeros_like(x[:,0]) 会生成一个独立的零张量,它和输入x没有任何计算关联:
    • 这个张量默认requires_grad=False,也没有对应的grad_fn(梯度追踪函数)
    • PyTorch的自动求导系统必须通过计算图追踪输出与输入的依赖链路,没有这条链路就无法计算梯度,因此触发报错。

可行解决方案

方案1:基于输入x生成零张量(你提到的写法)

用0 * x[:,0]或者x[:,0] - x[:,0]这类和x相关的运算生成零张量,这样输出会保留和x的计算连接,Autograd能正常追踪梯度:

def g(x):
    return 0 * x[:,0]  # 等价写法:return x[:,0] - x[:,0]

这种写法简洁直接,完全符合Autograd的追踪逻辑,是最优方案之一。

方案2:手动绑定计算依赖(冗余,不推荐)

如果一定要用torch.zeros_like,可以通过添加一个和x相关的零运算来建立连接,但写法冗余:

def g(x):
    zero = torch.zeros_like(x[:,0])
    # 加入与x相关的零操作,让计算图关联起来
    return zero + x[:,0] * 0

总结

核心要求是让g(x)的输出和输入x存在计算依赖,这样Autograd才能完成梯度计算。你用的0*x写法完全满足需求,是合理且高效的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:37:27