了解在 PyTorch 中使用 backward() 进行梯度计算
Understanding gradient computation using backward() in PyTorch
我正在尝试了解基本的 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()
时,您都会计算关于所有参数(在您的情况下只是 x
).粗略地说,这意味着所有以某种方式参与计算的张量都具有 requires_grad=True
。所以这意味着
x.grad = dx / dx = 1
补充一点:通过自动微分,你总是用“常数”值计算:你所有的函数或网络总是在一个具体的点上被评估。你得到的梯度是在同一点评估的梯度。没有符号计算发生。计算梯度所需的所有信息都编码在计算图中。
我正在尝试了解基本的 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()
时,您都会计算关于所有参数(在您的情况下只是 x
).粗略地说,这意味着所有以某种方式参与计算的张量都具有 requires_grad=True
。所以这意味着
x.grad = dx / dx = 1
补充一点:通过自动微分,你总是用“常数”值计算:你所有的函数或网络总是在一个具体的点上被评估。你得到的梯度是在同一点评估的梯度。没有符号计算发生。计算梯度所需的所有信息都编码在计算图中。