在pytorch中,y.backward的含义([0.1,1.0,0.0001])

在pytorch中,y.backward的含义([0.1,1.0,0.0001]),pytorch,Pytorch,在皮托克 y.backward([0.1,1.0,0.0001])的含义是什么 我理解y.backward()意味着进行反向传播。 但是[0.1,1.0,0.0001]在y.backward([0.1,1.0,0.0001])中的[0.1,1.0,0.0001]是什么意思?表达式y.backward([0.1,1.0,0.0001])实际上是错误的。它应该是y.backward(火炬张量([0.1,1.0,0.0001]),其中火炬张量([0.1,1.0,0.0001])是计算导数的变量 示例

在皮托克
y.backward([0.1,1.0,0.0001])的含义是什么

我理解
y.backward()
意味着进行反向传播。
但是
[0.1,1.0,0.0001]
y.backward([0.1,1.0,0.0001])
中的
[0.1,1.0,0.0001]是什么意思?

表达式
y.backward([0.1,1.0,0.0001])
实际上是错误的。它应该是
y.backward(火炬张量([0.1,1.0,0.0001])
,其中
火炬张量([0.1,1.0,0.0001])
是计算导数的变量


示例

x=变量(torch.ones(2,2),需要_grad=True)
y=(x+2).mean()
y、 向后(火炬张量([1.0]))
打印(x.grad)
这里,
y=(x+2)/4
因此,
dy/dx_i=0.25
因为
x_i=1.0
。还要注意,
y.backward(torch.Tensor([1.0])
y.backward()
是等效的

如果您这样做:

y.向后(火炬张量([0.1]))
打印(x.grad)
它打印:

变量包含:
1.00000e-02*
2.5000  2.5000
2.5000  2.5000
[火炬.尺寸为2x2的浮标张量]
它只是
0.1*0.25=0.025
。那么,现在如果你计算:

y.backward(火炬张量([0.1,0.01]))
打印(x.grad)
然后打印:

变量包含:
1.00000e-02*
2.5000  0.2500
2.5000  0.2500
[火炬.尺寸为2x2的浮标张量]
其中,
dy/dx_11=dy/d_x21=0.025
dy/dx_12=dy/d_x22=0.0025


请参见的功能原型。你可以考虑看这个问题。

第一,它不是<代码> y-向后((0.1,1,0.0001)< /代码>,因为在PyTrk中,任何参数都应该是<代码>张量< /代码>。所以正确的一个应该是代码> y-向后(火炬。张量([ 0.1,1,0.0001 ],dType =火炬。浮标)< <代码>)。 使用此处的链接检查文档


其次,这个
torch.tensor([0.1,1.0,0.0001],dtype=torch.float)
创建一个包含3个元素的一维张量。代码
y.backward(torch.tensor([0.1,1.0,0.0001])
实际上是用
y

计算向量积。这是输出为向量时的自动标记。我们无法获得向量的梯度,我们需要将该向量转换为定标器。梯度参数是将该向量转换为定标器的权重

例如,输入:x=[x1,x2,x3],操作:y=2*x=[2*x1,2*x2,2*x3]

然后,我们不能得到dy/dx。如果我们有y.backward(torch.tensor([0.1,1,0.001]),这意味着我们有另一个变量:output=torch.sum(y*[0.1,1,0.001])=0.2*x1+2*x2+0.002*x3。

然后,我们可以得到d(out)/dx,d(out)/dx将存储在x.grad中。在我们的示例中,x.grad=[d(out)/dx1,d(out)/dx2,d(out)/dx3]=[0.2,2,0.002]