【问题标题】:Autograd function in Pytorch documentation [duplicate]Pytorch 文档中的 Autograd 函数
【发布时间】: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 的结果 在此先感谢

【问题讨论】:

    标签: pytorch gradient autograd


    【解决方案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>)
    
    
    

    【讨论】:

    • 感谢您的帮助...
    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 2021-02-22
    • 2019-07-02
    • 2023-01-01
    • 2018-09-06
    • 2021-09-20
    • 2017-10-27
    • 2021-02-22
    相关资源
    最近更新 更多