Shortcuts

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()),此检查可能会失败,因为通过在这些索引处进行点扰动计算的数值梯度将改变所有共享相同内存地址的其他索引处的值。

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

  • 输入 (元组张量张量) – 函数的输入

  • grad_outputs元组张量张量可选)—— 关于函数输出的梯度。

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

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

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

  • gen_non_contig_grad_outputs (布尔值, 可选) – 如果 grad_outputsNone 并且 gen_non_contig_grad_outputsTrue,则随机生成的梯度输出将被设置为非连续的

  • raise_exception (bool, 可选) – 指示在检查失败时是否引发异常。异常提供了有关失败确切性质的更多信息。这在调试gradchecks时非常有帮助。

  • nondet_tol (float, 可选) – 非确定性容差。当通过微分运行相同的输入时,结果必须完全匹配(默认值为0.0)或在此容差范围内。请注意,梯度中的少量非确定性将导致二阶导数中的更大不准确性。

  • check_undefined_grad (布尔值, 可选) – 如果为真,检查是否支持并将未定义的输出梯度视为零

  • check_batched_grad (bool, 可选) – 如果为 True,检查我们是否可以使用原型 vmap 支持计算批量梯度。默认为 False。

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

  • masked (布尔值, 可选) – 如果为True,则忽略稀疏张量中未指定元素的梯度(默认值为False)。

Returns

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

Return type

bool

优云智算