評價此頁

torch.autograd.backward#

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None, inputs=None)[source]#

計算給定張量相對於圖葉子的梯度之和。

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

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

注意

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

注意

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

注意

當提供了 inputs 並且給定的輸入不是葉子節點時,當前實現將呼叫其 grad_fn(即使嚴格來說並不需要它來獲取此梯度)。這是一個使用者不應依賴的實現細節。有關更多詳細資訊,請參閱 pytorch/pytorch#60521

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

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

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

  • create_graph (bool, optional) – 如果為 True,則將構造導數的圖,從而可以計算高階導數乘積。預設為 False

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