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)[源代码]
-
计算并返回输出对输入的梯度总和。
grad_outputs
应该是一个与output
长度相匹配的序列,包含向量-雅可比积中的“向量”,通常是相对于每个输出预先计算的梯度。如果某个输出不需要求导,则其梯度可以为None
。注意
如果你在用户指定的CUDA流上下文中运行前向操作、创建
grad_outputs
或调用grad
,请参阅反向传递的流语义。注意
only_inputs
参数已弃用,现在被忽略(默认值为True
)。 若要为图中的其他部分累积梯度,请使用torch.autograd.backward
。- 参数
-
-
outputs (sequence of Tensor or GradientEdge) – 被区分函数的输出。
-
inputs (Tensor 序列或 GradientEdge) – 计算梯度的输入,且不将其累加到
.grad
中。 -
grad_outputs (Tensor序列) – 在向量-雅可比矩阵积中的“向量”。通常是每个输出的梯度。对于标量张量或不需要计算梯度的张量,可以指定为 None。如果所有 grad_tensors 均可接受 None,则此参数是可选的。默认值:None。
-
retain_graph (bool, optional) – 如果为
False
,用于计算梯度的图将被释放。注意,在绝大多数情况下设置此选项为True
是不必要的,并且通常可以使用更有效的方法解决。默认值与create_graph
的值相同。 -
create_graph (bool, 可选) – 如果为
True
,将构建导数的图,从而可以计算更高阶导数的乘积。默认值:False
。 -
allow_unused (Optional[bool], 可选) – 如果为
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, 可选) – 如果为
True
,则将未使用的输入的梯度设置为零而不是 None。这在计算高阶导数时很有用。如果materialize_grads
为True
而且allow_unused
为False
,则会引发错误。默认值为False
。
-
- 返回类型