快捷方式

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) – 如果为 Truegrad_outputs 中每个张量的第一个维度将被解释为批处理维度。我们将计算一个批次的向量-雅可比积,而不是计算单个向量-雅可比积,批次中的每个“向量”对应一个积。我们使用 vmap 原型功能作为后端,将对自动微分引擎的调用向量化,以便在单次调用中执行此计算。与手动循环多次执行反向传播相比,这应该能带来性能提升。请注意,由于此功能处于实验阶段,可能会存在性能瓶颈。如果您的用例存在警告,请使用 torch._C._debug_only_display_vmap_fallback_warnings(True) 显示任何性能警告并在 GitHub 上提交问题。默认值:False

  • materialize_grads (bool, optional) – 如果为 True,将未使用的输入的梯度设置为零而不是 None。这在计算更高阶导数时非常有用。如果 materialize_gradsTrueallow_unusedFalse,将引发错误。默认值:False

返回类型

tuple[torch.Tensor, …]

文档

访问 PyTorch 全面开发者文档

查看文档

教程

获取针对初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得问题解答

查看资源