评价此页

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 TensorGradientEdge) – 被微分函数的输出。

  • inputs (序列 of TensorGradientEdge) – 将返回其梯度的输入(而不是累积到 .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_gradsTrueallow_unusedFalse,则会引发错误。默认为 False

返回类型

tuple[torch.Tensor, …]