![](/img/trans.png)
[英]What is the first parameter (gradients) of the backward method, in pytorch?
[英]I am looking for a comprehensive explanation of the `inputs` parameter of the `.backward()` method in PyTorch
我無法理解.backward()
調用中inputs
關鍵字的用法。
文檔說明如下:
inputs (sequence of Tensor) – 將梯度累積到.grad 中的輸入。 所有其他張量將被忽略。 如果未提供,則梯度將累積到用於計算 attr::tensors 的所有葉張量中。
據我了解,這允許我們指定我們將查看梯度的輸入。
是否已經指定 if .backward()
被稱為像損失一樣的張量loss.backward()
? 計算圖不會確保根據相關參數計算梯度。
我還沒有找到可以更好地解釋這一點的資料來源。 如果我能得到解釋,我將不勝感激。
它只是一種限制計算梯度的參數集的方法(如文檔中所述)。 這是一個例子:
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}')
輸出:
到目前為止沒有累積梯度:無,無
調用 loss.backward() 后的梯度:8.0、16.0
由 model.zero_grad() 重置的漸變
調用 loss.backward(inputs=[model.a]) 后的梯度:8.0,0.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.