Sha*_*wat 5 python pytorch autograd
我无法理解inputs调用中关键字的用法.backward()。
该文档说明如下:
\n\n\n输入(张量序列) \xe2\x80\x93 输入,梯度将累积到 .grad 中。所有其他张量将被忽略。如果未提供,则梯度将累积到用于计算 attr::tensor 的所有叶张量中。
\n
据我了解,这允许我们指定我们将查看梯度的输入。
\n已经指定的 if 不是.backward()被称为像损失这样的张量吗loss.backward()?\n计算图不能确保梯度是根据相关参数计算的。
我还没有找到更好地解释这一点的来源。如果我能得到解释,我将不胜感激。
\n它只是一种限制计算梯度的参数集的方法(如文档中所述)。这是一个例子:
import torch
from torch import nn
class Model(nn.Module):
# warning: useless model for explanatory purpose only
def __init__(self):
super().__init__()
self.a = nn.Parameter(torch.as_tensor(1.))
self.b = nn.Parameter(torch.as_tensor(1.))
def forward(self, x):
return x + self.a + 2 * self.b
model = Model()
print(f'no gradients accumulated so far: {model.a.grad}, {model.b.grad}')
loss = model(1)**2
loss.backward()
print(f'gradients after calling loss.backward(): {model.a.grad}, {model.b.grad}')
model.zero_grad()
print('gradients reset by model.zero_grad()')
loss = model(1)**2
loss.backward(inputs=[model.a])
print(f'gradients after calling loss.backward(inputs=[model.a]): {model.a.grad}, {model.b.grad}')
Run Code Online (Sandbox Code Playgroud)
输出:
到目前为止没有积累的梯度:无,无
调用loss.backward()后的梯度:8.0, 16.0
由model.zero_grad()重置的梯度 调用
loss.backward(inputs=[model.a])后的梯度:8.0, 0.0
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |