为什么在执行 .backward() 之前执行 torch.sum()?

Puf*_*ers 3 python machine-learning matplotlib gradient-descent pytorch

我可以从这个视频中看到下面这段代码试图做什么。但是sumfromy=torch.sum(x**2)让我感到困惑。通过sum操作,y变成一个只有一个值的张量。正如我所理解的.backward()计算导数,为什么我们要使用sum并减少y到一个值?

import pytorch
import matplotlib.pyplot as plt 
x = torch.linspace(-10.0,10.0,10, requires_grad=True)
Y = x**2
y = torch.sum(x**2)     
y.backward()

plt.plot(x.detach().numpy(), Y.detach().numpy(), label="Y")
plt.plot(x.detach().numpy(), x.grad.detach().numpy(), label="derivatives")
plt.legend()
Run Code Online (Sandbox Code Playgroud)

Sha*_*hai 6

您只能计算标量函数的偏导数。是什么backwards()给你的是d loss/d parameter,你希望一个单一的每个参数/变量梯度值。
如果您的损失函数是一个向量函数,即从多个输入映射到多个输出,您最终会得到每个参数/变量的多个梯度。

请参阅此答案以获取更多信息。