【问题标题】:autograd differentiation example in PyTorch - should be 9/8?PyTorch 中的 autograd 微分示例 - 应该是 9/8?
【发布时间】:2020-04-28 17:57:48
【问题描述】:

example for the Torch tutorial for Python 中,他们使用以下图表:

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

在代码中是这样的:

import torch

# define graph
x = torch.ones(2, 2, requires_grad=True)
y = x + 2
z = y * y * 3
out = z.mean()

# if we don't do this, torch will only retain gradients for leaf nodes, ie: x
y.retain_grad()
z.retain_grad()

# does a forward pass
print(z, out)

但是,我对计算出的梯度感到困惑:

# now let's run our backward prop & get gradients
out.backward()
print(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

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

任何指针?

【问题讨论】:

    标签: python neural-network pytorch gradient-descent autograd


    【解决方案1】:
    do/dz = 1 / 4
    dz/dy = 6y = 6 * 3 = 18
    dy/dx = 1
    

    因此,do/dx = 9/2

    【讨论】:

    • 天哪。我显然需要复习新生微积分.....谢谢!看起来 Torch 工作得很好。
    猜你喜欢
    • 2018-12-05
    • 2017-10-27
    • 2020-05-12
    • 2021-02-27
    • 2020-05-13
    • 2018-09-06
    • 2021-11-04
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多