torch.autograd.gradcheck.gradgradcheck

torch.autograd.gradcheck.gradgradcheck(func, inputs, grad_outputs=None, *, eps=1e-06, atol=1e-05, rtol=0.001, gen_non_contig_grad_outputs=False, raise_exception=True, nondet_tol=0.0, check_undefined_grad=True, check_grad_dtypes=False, check_batched_grad=False, check_fwd_over_rev=False, check_rev_over_rev=True, fast_mode=False, masked=False)[源代码]

通过小的有限差分计算得到的二阶梯度,与inputsgrad_outputs中具有requires_grad=True且为浮点或复数类型的张量的解析梯度进行对比。

此函数用于检查通过给定的 grad_outputs 计算的梯度进行反向传播是否正确。

数值梯度和解析梯度的检查使用 allclose() 函数。

注意

默认值是为 inputgrad_outputs 的双精度设计的。如果它们的精度低于双精度(例如 FloatTensor),此检查可能会失败。

警告

如果 inputgrad_outputs 中的任何受检张量具有重叠的内存(即不同的索引指向相同的内存地址,例如通过 torch.expand() 操作),此检查可能会失败。因为在这些索引处通过点扰动计算出的数值梯度会改变所有共享相同内存地址的其他索引处的值。

参数
  • func函数)– 一个接受张量输入并返回张量或张量元组的 Python 函数

  • inputs (元组 of TensorTensor) – 函数的输入参数

  • grad_outputs (元组 of Tensor 或单个 Tensor, 可选) – 函数输出的梯度。

  • eps (float, 可选) – 有限差分计算中的扰动值

  • atol (float, 可选) – 绝对 tolerance

    改为更自然的表达:

    atol (float, 可选) – 绝对容差值

  • rtol (float, 可选) – 相对容忍度

  • gen_non_contig_grad_outputs (bool, optional) – 当 grad_outputsNonegen_non_contig_grad_outputsTrue 时,随机生成的梯度输出将是非连续的。

  • raise_exception (bool, 可选) – 表示是否在检查失败时抛出异常。如果抛出异常,会提供更多关于失败原因的详细信息,这在调试梯度检查时非常有用。

  • nondet_tol (float, 可选) – 非确定性的容差。在使用相同的输入进行求导时,结果必须完全匹配(默认值为 0.0),或者允许一定的误差范围。请注意,梯度中的少量非确定性会导致二阶导数出现更大的不准确。

  • check_undefined_grad (bool, 可选) – 如果为 True,检查是否支持未定义的输出梯度,并将其处理为零。

  • check_batched_grad (bool, optional) – 如果为 True,将检查是否可以使用原型 vmap 支持来计算批处理梯度。默认值为 False。

  • fast_mode (bool, 可选) – 如果为 True,则使用 gradgradcheck 的更快实现,不再计算整个雅可比矩阵。

  • masked (bool, optional) – 如果设置为 True,则忽略稀疏张量中未指定元素的梯度(默认值为 False)。

返回值

如果所有的差异都满足allclose条件,则结果为真

返回类型

bool

本页目录