gpt4 book ai didi

pytorch - 了解 pytorch autograd

转载 作者:行者123 更新时间:2023-12-02 19:42:17 26 4
gpt4 key购买 nike

我试图了解 pytorch autograd 的工作原理。如果我有函数 y = 2x 和 z = y**2,如果我进行正常微分,我会在 x = 1 处得到 dz/dx 作为 8 (dz/dx = dz/dy * dy/dx = 2y*2 = 2 (2x)*2 = 8x)。或者,z = (2x)**2 = 4x^2 且 dz/dx = 8x,因此当 x = 1 时,它是 8。

如果我对 pytorch autograd 做同样的事情,我会得到 4

x = torch.ones(1,requires_grad=True)
y = 2*x
z = y**2
x.backward(z)
print(x.grad)

打印内容

tensor([4.])

我哪里出错了?

最佳答案

您正在使用Tensor.backward错误的。要获得您要求的结果,您应该使用

x = torch.ones(1,requires_grad=True)
y = 2*x
z = y**2
z.backward() # <-- fixed
print(x.grad)

z.backward() 的调用会调用反向传播算法,从 z 开始并返回到计算图中的每个叶节点。在这种情况下,x 是唯一的叶节点。调用 z.backward() 后,计算图将被重置,并且每个叶节点的 .grad 成员将使用 z 的梯度进行更新相对于叶节点(在本例中为 dz/dx)。

您的原始代码中实际发生了什么?好吧,您所做的就是从 x 开始应用反向传播。如果没有参数,x.backward() 只会导致 x.grad 设置为 1,因为 dx/dx = 1。附加参数(gradient) 实际上是应用于生成的渐变的比例。在本例中 z=4,因此您得到 x.grad = z * dx/dx = 4 * 1 = 4。有兴趣的话可以查看this了解有关 gradient 参数作用的更多信息。

关于pytorch - 了解 pytorch autograd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59924167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com