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),其中k2**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梯度探究

pytorch学习笔记第三篇———自动梯度(torch.autograd)

pytorch 笔记: 扩展torch.autograd

Pytorch中的autograd详解

超简单!pytorch入门教程:Autograd

『PyTorch』第五弹_深入理解autograd_下:函数扩展&高阶导数