0

在此处输入图像描述

在 Pytorch 文档https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py 图像中,我无法理解 y.backward(v ) 表示以及为什么我们需要定义另一个张量 v 来进行反向操作以及我们如何获得 x.grad 的结果提前谢谢

4

1 回答 1

2

y.backward()计算 dy/dz 其中z是计算图中的所有叶节点。它存储dy/dzz.grad.

例如:在上述情况下,叶子节点是 x。

y.backward()y是一个标量时起作用,这是大多数深度学习的情况。什么时候y是一个向量,你必须传递另一个向量(v在上面的例子中)。您可以将其视为计算d(v^Ty)/dx


要回答我们是如何得到x.grad注意的,x除非 norm 超过1000,否则您会以 2 的幂次方加注,那么x.gradwhere v*k*x**(k-1)isk2**iisi循环执行的次数。

举一个不太复杂的例子,考虑一下:


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 回答