• 文档 >
  • 自动微分包 - torch.autograd >
  • torch.autograd.grad
快捷键

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]

计算并返回输出相对于输入的梯度的总和。

应该与 output 的长度匹配,通常包含向量-雅可比积中的“向量”,通常是针对每个输出预先计算的梯度。如果某个输出不需要 require_grad,则梯度可以是 None )。

注意

如果您运行任何前向操作,请创建 grad_outputs ,并在用户指定的 CUDA 流上下文中调用 grad ,有关反向传播的流语义,请参阅。

注意

only_inputs 参数已弃用,现在被忽略(默认为 True )。要累积图中其他部分的梯度,请使用 torch.autograd.backward

参数:
  • outputs(Tensor 或 GradientEdge 的序列)-微分函数的输出。

  • inputs(Tensor 或 GradientEdge 的序列)-相对于这些输入将返回梯度(而不是累积到 .grad )。

  • grad_outputs(Tensor 序列)- 向量-雅可比积中的“向量”。通常是相对于每个输出的梯度。对于标量 Tensor 或不需要求梯度的 Tensor,可以指定 None 值。如果对于所有 grad_tensors 都可以接受 None 值,则此参数是可选的。默认:None。

  • retain_graph (bool, 可选) – 如果 False ,计算梯度时使用的图将被释放。请注意,在几乎所有情况下,将此选项设置为 True 通常是不必要的,并且通常可以通过更有效的方式解决。默认值为 create_graph

  • create_graph(bool,可选)- 如果 True ,将构建导数的图,允许计算高阶导数乘积。默认: False

  • allow_unused(Optional[bool],可选)- 如果 False ,指定在计算输出时未使用的输入(因此其梯度始终为零)是一个错误。默认值为 materialize_grads 的值。

  • is_grads_batched (bool, 可选) – 如果 True ,则将 grad_outputs 中每个张量的第一个维度解释为批处理维度。我们不是计算单个向量-雅可比乘积,而是为批处理中的每个“向量”计算一批向量-雅可比乘积。我们使用 vmap 原型功能作为后端来向量化对自动微分引擎的调用,以便可以在单个调用中执行此计算。与手动循环和多次执行反向操作相比,这应该会带来性能提升。请注意,由于此功能为实验性,可能会有性能悬崖。请使用 torch._C._debug_only_display_vmap_fallback_warnings(True) 显示任何性能警告,并在存在针对您的用例的警告时在 github 上提交问题。默认为 False

  • materialize_grads (bool, 可选) – 如果 True ,则将未使用输入的梯度设置为 0 而不是 None。这在计算高阶导数时很有用。如果 materialize_gradsTrueallow_unusedFalse ,则将引发错误。默认为 False

返回类型:

tuple[torch.Tensor, …]


© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,主题由 Read the Docs 提供。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源