快捷方式

torch.autograd.grad

torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=None, is_grads_batched=False, materialize_grads=False)[source][source]

計算並返回 outputs 對 inputs 的梯度之和。

grad_outputs 應該是一個序列,其長度與 output 匹配,包含向量-雅可比積中的“向量”,通常是相對於每個 output 的預計算梯度。如果 output 不需要計算梯度,則對應的梯度可以是 None)。

注意

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

注意

only_inputs 引數已棄用,現在會被忽略(預設為 True)。要為圖的其他部分累積梯度,請使用 torch.autograd.backward

引數
  • outputs (sequence of Tensor or GradientEdge) – 待微分函式的輸出。

  • inputs (sequence of Tensor or GradientEdge) – 將返回相對於這些輸入的梯度(且不會累積到 .grad 中)。

  • grad_outputs (sequence of Tensor) – 向量-雅可比積中的“向量”。通常是相對於每個輸出的梯度。對於標量 Tensor 或不需要梯度的 Tensor,可以指定 None 值。如果所有 grad_tensors 都接受 None 值,則此引數是可選的。預設值:None。

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

  • create_graph (bool, optional) – 如果為 True,將構建導數的圖,允許計算更高階的導數乘積。預設值:False

  • allow_unused (Optional[bool], optional) – 如果為 False,指定在計算輸出時未使用的輸入(因此它們的梯度始終為零)將引發錯誤。預設為 materialize_grads 的值。

  • is_grads_batched (bool, optional) – 如果為 Truegrad_outputs 中每個張量的第一個維度將被解釋為批處理維度。我們將計算一個批次的向量-雅可比積,而不是計算單個向量-雅可比積,批次中的每個“向量”對應一個積。我們使用 vmap 原型功能作為後端,將對自動微分引擎的呼叫向量化,以便在單次呼叫中執行此計算。與手動迴圈多次執行反向傳播相比,這應該能帶來效能提升。請注意,由於此功能處於實驗階段,可能會存在效能瓶頸。如果您的用例存在警告,請使用 torch._C._debug_only_display_vmap_fallback_warnings(True) 顯示任何效能警告並在 GitHub 上提交問題。預設值:False

  • materialize_grads (bool, optional) – 如果為 True,將未使用的輸入的梯度設定為零而不是 None。這在計算更高階導數時非常有用。如果 materialize_gradsTrueallow_unusedFalse,將引發錯誤。預設值:False

返回型別

tuple[torch.Tensor, …]

文件

訪問 PyTorch 全面開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深入教程

檢視教程

資源

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

檢視資源