Pytorch 文档中的 Autograd 函数
Posted
技术标签:
【中文标题】Pytorch 文档中的 Autograd 函数【英文标题】:Autograd function in Pytorch documentation [duplicate] 【发布时间】:2020-05-13 02:12:27 【问题描述】:在 Pytorch 文档中https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py 在图像中,我无法理解 y.backward(v) 的含义以及为什么我们需要定义另一个张量 v 来进行反向操作以及我们如何获得 x.grad 的结果 在此先感谢
【问题讨论】:
【参考方案1】:y.backward()
计算 dy/dz,其中z
是计算图中的所有叶节点。并将dy/dz
存储在z.grad
中。
例如:在上面的例子中,叶子节点是x。
y.backward()
在y
是一个标量时起作用,这是大多数深度学习的情况。当y
是一个向量时,您必须传递另一个向量(在上述情况下为v
)。您可以将其视为计算d(v^Ty)/dx
。
要回答我们如何得到x.grad
,请注意,除非范数超过1000
,否则x
是2 的幂,所以x.grad
将是v*k*x**(k-1)
,其中k
是2**i
和@987654337 @ 是循环执行的次数。
举一个不太复杂的例子,考虑一下:
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>)
【讨论】:
感谢您的帮助...以上是关于Pytorch 文档中的 Autograd 函数的主要内容,如果未能解决你的问题,请参考以下文章
『PyTorch』第五弹_深入理解autograd_下:Variable梯度探究