grad() 在 PyTorch 中如何工作?
How does grad() works in PyTorch?
我需要 Pytorch grad() 函数的输入在概念上更加清晰。
请看以下代码:
import torch
a = torch.tensor([2., 3.], requires_grad=True)
b = torch.tensor([6., 4.], requires_grad=True)
Q = 1/3*a**3 - 1/2*b**2
在这里,我定义了 3 个张量,我试图计算 Q
w.r.t a
的导数。
下面一行将简单地计算一阶和二阶导数。
Q_a = torch.autograd.grad(Q.sum(), a, create_graph=True)[0]
Q_aa = torch.autograd.grad(Q_a.sum(), a, create_graph=True)[0]
print('Q_a =',Q_a.detach().numpy())
print('Q_aa =',Q_aa.detach().numpy())
输出为:
Q_a = [4. 9.]
Q_aa = [4. 6.]
我想知道,为什么我需要传递 Q.sum()
或 Q_a.sum()
这只是 1 个值,而第二个参数 a
有两个值。
>>> print(Q.sum())
>>> tensor(-14.3333, grad_fn=<SumBackward0>)
>>> print(a)
>>> tensor([2., 3.], requires_grad=True)
谁能给我解释一下 Q.sum()
如何帮助计算正确的梯度。是否可以仅使用 Q
而不是 Q.sum()
来计算导数?
我需要 Pytorch grad() 函数的输入在概念上更加清晰。 请看以下代码:
import torch
a = torch.tensor([2., 3.], requires_grad=True)
b = torch.tensor([6., 4.], requires_grad=True)
Q = 1/3*a**3 - 1/2*b**2
在这里,我定义了 3 个张量,我试图计算 Q
w.r.t a
的导数。
下面一行将简单地计算一阶和二阶导数。
Q_a = torch.autograd.grad(Q.sum(), a, create_graph=True)[0]
Q_aa = torch.autograd.grad(Q_a.sum(), a, create_graph=True)[0]
print('Q_a =',Q_a.detach().numpy())
print('Q_aa =',Q_aa.detach().numpy())
输出为:
Q_a = [4. 9.]
Q_aa = [4. 6.]
我想知道,为什么我需要传递 Q.sum()
或 Q_a.sum()
这只是 1 个值,而第二个参数 a
有两个值。
>>> print(Q.sum())
>>> tensor(-14.3333, grad_fn=<SumBackward0>)
>>> print(a)
>>> tensor([2., 3.], requires_grad=True)
谁能给我解释一下 Q.sum()
如何帮助计算正确的梯度。是否可以仅使用 Q
而不是 Q.sum()
来计算导数?