python - 为什么应该仅在 1 个元素张量或梯度 w.r.t 到 Variable 上调用 backward 函数?

标签 python pytorch

我是 pytorch 的新手。我想了解为什么我们不能在包含大小为 [2,2] 的张量的变量上调用向后函数。 如果我们确实想在包含大小为[2,2]的张量的变量上调用它,我们必须首先定义一个梯度张量,然后在包含定义梯度的张量的变量上调用向后函数.

最佳答案

来自 autograd 的教程

If you want to compute the derivatives, you can call .backward() on a Variable. If Variable is a scalar (i.e. it holds a one element data), you don’t need to specify any arguments to backward(), however if it has more elements, you need to specify a grad_output argument that is a tensor of matching shape.

基本上,要启动链式法则,您需要在输出端设置一个梯度,以使其运行。如果输出是一个标量损失函数(它通常是 - 通常你从损失变量开始向后传递),它的隐含值为 1.0

来自教程:

let's backprop now out.backward() is equivalent to doing out.backward(torch.Tensor([1.0]))

但也许您只想更新一个子图(在网络深处的某个地方)...而 Variable 的值是一个权重矩阵。然后你必须告诉它从哪里开始。来自他们的一位首席开发人员(在链接中的某处)

是的,没错。我们只支持标量微分 函数,所以如果你想从一个非标量值向后开始 你需要提供dout/dy

梯度参数

https://discuss.pytorch.org/t/how-the-backward-works-for-torch-variable/907/8好的解释

Pytorch, what are the gradient arguments很好的解释

http://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html教程

关于python - 为什么应该仅在 1 个元素张量或梯度 w.r.t 到 Variable 上调用 backward 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264443/

相关文章:

python - 由于 GNU Radio block 的快速输入流而导致绘图卡住

python - 如何加载部分预训练的 pytorch 模型?

python - 获取具有多个不明确元素的数组的真值以进行蛋白变换

python - 在 PyTorch 中,nll_loss 的输入是什么?

python - 如何修复这个奇怪的错误 : "RuntimeError: CUDA error: out of memory"

python - 如何使用 Python 在后台运行 DOS 批处理文件?

python - 从嵌套列表中删除不需要的文本

python - 有什么方法可以使用 Pycharm 调试在终端中运行的脚本吗?

python - 十进制数的二进制邻居

python - pytorch 中的 conv2d 函数