在 Pytorch 文档https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py 图像中,我无法理解 y.backward(v ) 表示以及为什么我们需要定义另一个张量 v 来进行反向操作以及我们如何获得 x.grad 的结果提前谢谢
问问题
134 次
1 回答
2
y.backward()
计算 dy/dz 其中z
是计算图中的所有叶节点。它存储dy/dz
在z.grad
.
例如:在上述情况下,叶子节点是 x。
y.backward()
当y
是一个标量时起作用,这是大多数深度学习的情况。什么时候y
是一个向量,你必须传递另一个向量(v
在上面的例子中)。您可以将其视为计算d(v^Ty)/dx
。
要回答我们是如何得到x.grad
注意的,x
除非 norm 超过1000
,否则您会以 2 的幂次方加注,那么x.grad
where v*k*x**(k-1)
isk
和2**i
isi
循环执行的次数。
举一个不太复杂的例子,考虑一下:
x = torch.randn(3,requires_grad=True)
print(x)
Out: tensor([-0.0952, -0.4544, -0.7430], requires_grad=True)
y = x**2
v = torch.tensor([1.0,0.1,0.01])
y.backward(v)
print(x.grad)
Out[15]: tensor([-0.1903, -0.0909, -0.0149])
print(2*v*x)
Out: tensor([-0.1903, -0.0909, -0.0149], grad_fn=<MulBackward0>)
于 2020-01-27T17:39:13.220 回答