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

为何PyTorch中多次运行Block3时x.grad累加,Block4始终输出10?

问题原因解析
  • PyTorch的梯度默认采用累加机制:调用backward()时,计算出的梯度会直接加到张量已有的.grad属性上,而非覆盖原有值。
  • 分开运行Block2和Block3的场景:
    • Block2仅执行一次,创建了同一个带requires_grad=True的张量x,其.grad初始为None。
    • 每次运行Block3,都会基于这个固定的x计算梯度(结果为10),并将该值累加到x.grad中。第一次运行后x.grad=10,第二次累加后变为20,以此类推。
  • 合并运行Block4的场景:
    • 每次运行Block4,都会重新创建一个全新的张量x,新张量的.grad初始状态为None。
    • 每次计算梯度后,x.grad被赋值为10,由于没有之前的梯度积累,所以每次打印结果始终是10。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:28:15