首先,考虑一下Xueyter Notebook中的以下代码块
#Block1
import torch
#Block2
x = torch.tensor([1.], requires_grad=True)
#Block3
y = x**10
y.backward()
print(x.grad)
然后考虑以下代码(将块2和块3组合在一个单元中):
#Block4
x = torch.tensor([1.], requires_grad=True)
y = x**10
y.backward()
print(x.grad)
每次我运行#Block3时,我都会得到打印(x.grad)的累积结果,即10、20、30等。
但是通过运行#Block4,答案总是10
这背后的原因是什么?
1条答案
按热度按时间ar5n3qh51#
案例一:当你看到不同的渐变值时
这是因为当你调用
.grad
时,它会迭代地累积值,即第一次呼叫:
第二次通话:
第三通电话:
这还在继续。。
案例二:当你看到相同的渐变值时
在第二种情况下,每次运行编程块时都会创建一个新的Tensor
x
。新的内存将被分配给这些Tensor,grads将被初始化为0
。在这种情况下,你总是得到10。我希望能帮上忙。谢谢你,谢谢