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) – 如果為
True,grad_outputs中每個張量的第一個維度將被解釋為批處理維度。我們將計算一個批次的向量-雅可比積,而不是計算單個向量-雅可比積,批次中的每個“向量”對應一個積。我們使用 vmap 原型功能作為後端,將對自動微分引擎的呼叫向量化,以便在單次呼叫中執行此計算。與手動迴圈多次執行反向傳播相比,這應該能帶來效能提升。請注意,由於此功能處於實驗階段,可能會存在效能瓶頸。如果您的用例存在警告,請使用torch._C._debug_only_display_vmap_fallback_warnings(True)顯示任何效能警告並在 GitHub 上提交問題。預設值:False。materialize_grads (bool, optional) – 如果為
True,將未使用的輸入的梯度設定為零而不是 None。這在計算更高階導數時非常有用。如果materialize_grads為True且allow_unused為False,將引發錯誤。預設值:False。
- 返回型別
tuple[torch.Tensor, …]