python - 了解在 PyTorch 中使用 backward() 进行梯度计算

标签 python pytorch torch gradient-descent autograd

我正在尝试了解基本的 pytorch autograd 系统:

x = torch.tensor(10., requires_grad=True)
print('tensor:',x)
x.backward()
print('gradient:',x.grad)

输出:

tensor: tensor(10., requires_grad=True)
gradient: tensor(1.)

因为 x 是一个标量常数并且没有函数应用于它,所以我期望 0. 作为梯度输出。为什么梯度 1. 而不是?

最佳答案

每当您使用 value.backward() 时,您都会计算导数 value(在您的情况下 value == x)到你所有的参数(在你的例子中就是 x)。粗略地说,这意味着所有以某种方式参与您的计算的张量都具有 requires_grad=True。所以这意味着

x.grad = dx / dx = 1

补充一点:通过自动微分,您始终使用“常数”值进行计算:您的所有函数或网络始终在具体点进行评估。你得到的梯度是在同一点评估的梯度。没有符号计算发生。计算梯度所需的所有信息都编码在计算图中。

关于python - 了解在 PyTorch 中使用 backward() 进行梯度计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72362774/

相关文章:

python - 如何在python2.7中安装pytorch?

python - Tkinter - 无法绑定(bind)箭头键事件

python - 如何使用 python smtplib 通过谷歌应用程序帐户发送电子邮件?

python - 将循环层附加到具有不同隐藏大小的 PyTorch LSTM 模型

pytorch - Transformers PreTrainedTokenizer add_tokens 功能

python - torch 聚中维

image-processing - 如何在 Torch 中为卷积神经网络加载图像和标签

python - 为什么 Python +=(加等于)运算符不修改内部函数中的变量?

python - 存储一对需要在 Python 中经常更新的值的最佳方法?

pytorch - 排列后如何进行张量运算