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的所有葉子張量中。