評價此頁

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)[原始碼]#

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

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

注意

如果在使用者指定的 CUDA 流上下文中運行了任何前向操作、建立了 grad_outputs,或呼叫了 grad,請參閱 backward passes 的流語義

注意

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

引數
  • outputs (序列 of TensorGradientEdge) – 被微分函式的輸出。

  • inputs (序列 of TensorGradientEdge) – 將返回其梯度的輸入(而不是累積到 .grad 中)。

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

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

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

  • allow_unused (Optional[bool], 可選) – 如果為 False,則指定在計算 outputs 時未使用的 inputs(因此其梯度始終為零)將引發錯誤。預設為 materialize_grads 的值。

  • is_grads_batched (bool, 可選) – 如果為 True,則 grad_outputs 中每個 Tensor 的第一個維度將被解釋為批次維度。不是計算單個向量-雅可比乘積,而是為批次中的每個“向量”計算一批向量-雅可比乘積。我們使用 vmap 原型功能作為後端來向量化對 autograd 引擎的呼叫,以便此計算可以一次完成。與手動迴圈和多次執行 backward 相比,這應該會帶來效能提升。請注意,由於此功能是實驗性的,因此可能存在效能瓶頸。請使用 torch._C._debug_only_display_vmap_fallback_warnings(True) 來顯示任何效能警告,如果您的用例存在警告,請在 github 上提交 issue。預設為 False

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

返回型別

tuple[torch.Tensor, …]