Shortcuts

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

Parameters
  • 输出 (序列张量) – 微分函数的输出。

  • 输入序列张量梯度边)——相对于这些输入的梯度将被返回(而不是累积到.grad中)。

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

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

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

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

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

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

Return type

元组[张量, …]

优云智算