Python PyTorch中的autograd区分示例-应为9/8?

Python PyTorch中的autograd区分示例-应为9/8?,python,neural-network,pytorch,gradient-descent,autograd,Python,Neural Network,Pytorch,Gradient Descent,Autograd,在中,他们使用以下图表: x = [[1, 1], [1, 1]] y = x + 2 z = 3y^2 o = mean( z ) # 1/4 * x.sum() 因此,向前传球让我们明白: x_i = 1, y_i = 3, z_i = 27, o = 27 在代码中,这看起来像: 导入火炬 #定义图 x=火炬。一(2,2,需要_grad=True) y=x+2 z=y*y*3 out=z.平均值() #如果我们不这样做,torch将只保留叶节点的渐变,即:x y、 留级 z、 留级

在中,他们使用以下图表:

x = [[1, 1], [1, 1]]
y = x + 2
z = 3y^2
o = mean( z )  # 1/4 * x.sum()
因此,向前传球让我们明白:

x_i = 1, y_i = 3, z_i = 27, o = 27
在代码中,这看起来像:

导入火炬
#定义图
x=火炬。一(2,2,需要_grad=True)
y=x+2
z=y*y*3
out=z.平均值()
#如果我们不这样做,torch将只保留叶节点的渐变,即:x
y、 留级
z、 留级
#向前传球吗
打印(z,输出)
但是,我对计算的梯度感到困惑:

#现在让我们运行反向道具并获取渐变
out.backward()
打印(f'do/dz={z.grad[0,0]})
哪些产出:

do/dx = 4.5
根据链式规则,
do/dx=do/dz*dz/dy*dy/dx
,其中:

dy/dx = 1
dz/dy = 9/2 given x_i=1
do/dz = 1/4 given x_i=1
这意味着:

do/dx = 1/4 * 9/2 * 1 = 9/8
但是,这与火炬返回的梯度不匹配(9/2=4.5)。也许我有一个数学错误(do/dz=1/4项?),或者我不理解火炬中的
autograd

有什么建议吗

do/dz = 1 / 4
dz/dy = 6y = 6 * 3 = 18
dy/dx = 1
因此,do/dx=9/2


因此,do/dx=9/2。我显然需要复习一下大一的微积分……谢谢!看起来手电筒很好用哦天哪。我显然需要复习一下大一的微积分……谢谢!看起来手电筒工作得很好。