
在图像中的Pytorch文档https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py中,我无法理解y.backward(v)是什么意思,为什么我们需要定义另一个张量v来进行向后操作,以及我们是如何预先获得x.grad感谢的结果的
发布于 2020-01-28 01:39:13
y.backward()计算dy/dz,其中z是计算图中的所有叶节点。它将dy/dz存储在z.grad中。
例如:在上面的例子中,叶子节点是x。
当y是标量时,y.backward()起作用,这是大多数深度学习的情况。当y是一个向量时,你必须传递另一个向量(上面例子中的v)。您可以将其视为计算d(v^Ty)/dx。
为了回答我们是如何获得x.grad的,请注意,除非x超过1000,否则您可以将其提高2的幂,因此x.grad将为v*k*x**(k-1),其中k为2**i,i为执行循环的次数。
要有一个不太复杂的示例,请考虑以下内容:
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>)https://stackoverflow.com/questions/59935596
复制相似问题