【发布时间】:2021-05-28 01:42:26
【问题描述】:
在 PyTorch 中,有两种计算第二梯度的方法。第一种方法是使用torch.autograd.grad函数,另一种是使用backward函数。我用下面的例子来说明:
方法一:
x=torch.tensor([3.0], requires_grad=True)
y = torch.pow(x, 2)
grad_1 = torch.autograd.grad(y, x, create_graph=True)
print(grad_1[0].item())
grad_2 = torch.autograd.grad(grad_1[0], x)
print(grad_2)
结果对我来说很有意义,函数的第二个梯度是 2。
方法二:
x=torch.tensor([3.0], requires_grad=True)
y = torch.pow(x, 2) # y=x**2
y.backward(retain_graph=True)
print(x.grad)
y.backward()
print(x.grad)
在计算第一个梯度时,我使用create_graph=True 确保我们可以使用反向递推法计算第二个梯度。但是,结果是 12,这是错误的。我想知道第二种方法有什么问题?
【问题讨论】: