快捷方式

torch.autograd.backward

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None, inputs=None)[原始碼][原始碼]

計算給定張量對圖葉節點的梯度總和。

圖使用鏈式法則進行微分。如果 tensors 中的任何張量是非標量(即其資料包含多個元素)且需要梯度,則會計算雅可比向量積。在這種情況下,該函式還需要指定 grad_tensors。它應該是一個長度匹配的序列,包含雅可比向量積中的“向量”,通常是微分函式相對於相應張量的梯度(對於所有不需要梯度張量的張量,None 是可接受的值)。

此函式在葉節點中累積梯度 - 在呼叫它之前,您可能需要將 .grad 屬性清零或將其設定為 None。有關累積梯度的記憶體佈局的詳細資訊,請參閱 預設梯度佈局

注意

使用 create_graph=True 呼叫此方法會在引數及其梯度之間產生一個引用迴圈,這可能導致記憶體洩漏。我們建議在建立圖時使用 autograd.grad 來避免此問題。如果您必須使用此函式,請務必在使用後將引數的 .grad 欄位重置為 None,以打破迴圈並避免洩漏。

注意

如果您在使用者指定的 CUDA 流上下文中執行任何前向操作,建立 grad_tensors,和/或呼叫 backward,請參閱 後向傳播的流語義

注意

當提供了 inputs 並且給定的輸入不是葉節點時,當前實現將呼叫其 grad_fn(即使獲取這些梯度並不嚴格需要這樣做)。這是一個實現細節,使用者不應依賴它。更多詳細資訊請參閱 https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780

引數
  • tensors (Sequence[Tensor] 或 TensorSequence[GradientEdge] 或 GradientEdge) – 將計算導數的張量。

  • grad_tensors (Sequence[TensorNone] 或 Tensor, 可選) – 雅可比向量積中的“向量”,通常是相對於相應張量中每個元素的梯度。對於標量張量或不需要梯度的張量,可以指定 None 值。如果對於所有 grad_tensors 都可以接受 None 值,則此引數是可選的。

  • retain_graph (bool, 可選) – 如果為 False,用於計算梯度的圖將被釋放。請注意,在幾乎所有情況下,將此選項設定為 True 都是不必要的,並且通常可以透過更高效的方式解決。預設為 create_graph 的值。

  • create_graph (bool, 可選) – 如果為 True,將構建導數的圖,從而允許計算更高階導數積。預設為 False

  • inputs (Sequence[Tensor] 或 TensorSequence[GradientEdge], 可選) – 將梯度累積到 .grad 的輸入張量。所有其他張量將被忽略。如果未提供,梯度將累積到用於計算 tensors 的所有葉節點張量中。

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

獲取適合初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源