簡體   English   中英

我正在尋找 PyTorch 中 `.backward()` 方法的 `inputs` 參數的全面解釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM