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_grads
為True
且allow_unused
為False
,則會引發錯誤。 預設值:False
。
- 回傳型別