gpt4 book ai didi

python - 为什么 Pytorch autograd 需要标量?

转载 作者:行者123 更新时间:2023-12-04 11:25:43 27 4
gpt4 key购买 nike

我正在研究“使用 fastai 和 Pytorch 为编码人员进行深度学习”。第 4 章通过一个简单的例子介绍了 PyTorch 库中的 autograd 函数。

x = tensor([3.,4.,10.]).requires_grad_()
def f(q): return sum(q**2)
y = f(x)
y.backward()
我的问题归结为: y = f(x)的结果是 tensor(125., grad_fn=AddBackward0) ,但这到底是什么意思?为什么我要将三个完全不同的输入值相加?
我知道使用 .backward()在这种情况下是 .backward(tensor[1.,1.,1.]) 的简写在这种情况下,但我看不出将列表中的 3 个不相关数字相加如何帮助获得任何东西的梯度。我不明白什么?
我不是在这里寻找研究生级别的解释。我正在使用的这本书的副标题是没有博士学位的人工智能应用程序。我在学校的渐变经验是我应该恢复一个功能,但我知道 Autograd 不是这种情况。这个简短示例的图表会有所帮助,但我在网上看到的那些通常包含太多参数或权重和偏差而无用,我的思绪迷失在路径中。

最佳答案

TLDR;函数和的导数是它们的导数之和
x是由 x_i 组成的输入向量(其中 i[0,n] 中),y = x**2L = sum(y_i) .您要计算 dL/dx ,一个与 x 大小相同的向量其组件是 dL/dx_j (其中 j[0,n] 中)。
对于 j[0,n] , dL/dx_j就是 dy_j/dx_j (求和的导数是导数的总和,其中只有一个不为零),即d(x_j**2)/dx_j ,即 2*x_j .因此,dL/dx = [2*x_j where j in [0,n]] .
这是您在 x.grad 中得到的结果当计算 x 的梯度时作为:

y = f(x)
y.backward()
或者 x的各个分量的梯度分别地:
y = x**2
y.backward(torch.ones_like(x))

关于python - 为什么 Pytorch autograd 需要标量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68536392/

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