捷徑

torch.autograd.backward

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

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

該圖使用鏈式法則進行微分。如果任何 tensors 是非純量(即,它們的數據有多個元素)並且需要梯度,則會計算 Jacobian-向量積。在這種情況下,該函數還需要額外指定 grad_tensors。它應該是一個長度匹配的序列,其中包含 Jacobian-向量積中的“向量”,通常是微分函數 w.r.t. 相應 tensors 的梯度(None 對於所有不需要梯度 tensors 的情況是可以接受的值)。

此函數會累積葉節點中的梯度 - 在調用它之前,您可能需要將 .grad 屬性歸零或將它們設置為 None。有關累積梯度的記憶體佈局的詳細信息,請參閱 預設梯度佈局

注意

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

注意

如果您運行任何前向運算、建立 grad_tensors,以及/或在使用者指定的 CUDA 流上下文呼叫 backward,請參閱 backward passes 的流語義

注意

當提供 inputs 且給定的輸入不是葉節點時,目前的實現會呼叫其 grad_fn (即使嚴格來說不需要這樣做才能獲得這些梯度)。 這是使用者不應依賴的實作細節。 有關更多詳細資訊,請參閱 https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780

參數
  • tensors (Sequence[Tensor] 或 Tensor) – 將計算導數的 tensors。

  • grad_tensors (Sequence[TensorNone] 或 Tensor, optional) – Jacobian-向量積中的“向量”,通常是 w.r.t. 相應 tensors 的每個元素的梯度。 可以為純量 Tensors 或不需要 grad 的 tensors 指定 None 值。 如果所有 grad_tensors 都接受 None 值,則此參數是可選的。

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

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

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

文件

取得 PyTorch 的完整開發人員文件

檢視文件

教學

取得初學者和高級開發人員的深入教學

檢視教學

資源

尋找開發資源並獲得您的問題的解答

檢視資源