【发布时间】:2021-05-05 21:25:36
【问题描述】:
a=torch.tensor([1,2],dtype=dtype,requires_grad=True)
b=a[0]*a[1]
b.backward()
print(a.grad)
但是当我使用 a+=1 并想给 a 另一个值并进行另一轮反向传播时,它表明在就地操作中使用了需要 grad 的叶变量。
但是a=a+1 似乎是正确的。 a=a+1 和 a+=1 有什么区别?
(已解决)
我发现我对torch的疑惑其实在于下面这个小例子,
a=torch.tensor([1,2],dtype=dtype,requires_grad=True)
b=a[0]*a[1]
b.backward()
print(a.grad)
print(a.requires_grad)
c=2*a[0]*a[1]
c.backward()
print(a.grad)
当我进行第一轮反向传播时,我得到 a.grad=[2,1]。 然后我想重新开始并计算c相对于a的微分,但是梯度似乎在累积。如何消除这种影响?
【问题讨论】:
-
似乎 a.grad=None 有效,但我想知道梯度如何累积