快捷方式

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 相符的序列,包含向量-雅可比行列式乘積中的「向量」,通常是預先計算的各個輸出的梯度。 如果一個輸出不需要 require_grad,則梯度可以是 None

注意

如果您執行任何前向運算,建立 grad_outputs,和/或在使用者指定的 CUDA 串流上下文中呼叫 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) – 向量-雅可比行列式乘積中的「向量」。 通常是相對於每個輸出的梯度。 可以為純量張量或不需要 grad 的張量指定 None 值。 如果所有 grad_tensors 都接受 None 值,則此引數是可選的。 預設值:None。

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

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

  • allow_unused (Optional[bool], optional) – 如果為 False,指定在計算輸出時未使用(因此其 grad 始終為零)的輸入會導致錯誤。 預設為 materialize_grads 的值。

  • is_grads_batched (bool, optional) – 如果為 True,則 grad_outputs 中每個張量的第一個維度將被解釋為批次維度。 我們不是計算單個向量-雅可比行列式乘積,而是針對批次中的每個「向量」計算一批向量-雅可比行列式乘積。 我們使用 vmap 原型功能作為後端來向量化對 autograd 引擎的呼叫,以便可以在單個呼叫中執行此計算。 與手動循環並多次執行向後傳播相比,這應該可以提高效能。 請注意,由於此功能是實驗性的,因此可能存在效能瓶頸。 請使用 torch._C._debug_only_display_vmap_fallback_warnings(True) 來顯示任何效能警告,如果您的使用案例存在警告,請在 github 上提交問題。 預設值:False

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

回傳型別

Tuple[Tensor, …]

文件

取得 PyTorch 的完整開發者文件

檢視文件

教學課程

取得適合初學者和進階開發者的深入教學課程

檢視教學課程

資源

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

檢視資源