【问题标题】:How to change the value of a torch tensor with requires_grad=True so that the backpropogation can start again?如何使用 requires_grad=True 更改火炬张量的值,以便反向传播可以重新开始?
【发布时间】: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的微分,但是梯度似乎在累积。如何消除这种影响?

【问题讨论】:

标签: python pytorch


【解决方案1】:

+= 操作符用于就地操作,而a = a+1 不是就地操作(即a 指的是在此操作之后不同的张量)。

但在您的示例中,您似乎没有使用其中任何一个,因此很难说出您想要实现的目标。

【讨论】:

  • 谢谢,我现在明白了区别,我发现我对火炬的怀疑实际上在于另一个例子,我现在正在编辑我的问题
猜你喜欢
  • 2020-04-16
  • 2020-06-11
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2022-07-20
  • 1970-01-01
相关资源
最近更新 更多