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 Tensor 或 GradientEdge) – 被微分函式的輸出。
inputs (序列 of Tensor 或 GradientEdge) – 將返回其梯度的輸入(而不是累積到
.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_grads為True且allow_unused為False,則會引發錯誤。預設為False。
- 返回型別
tuple[torch.Tensor, …]