评价此页

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)[source]#

使用小量级有限差分法计算的梯度关于张量`inputs`和`grad_outputs`的梯度,它们是浮点型或复数类型且`requires_grad=True`,并将其与解析梯度进行比较。

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

数值梯度和解析梯度之间的比较使用allclose()

注意

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

警告

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

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

  • inputs (tuple of Tensor or Tensor) – 输入到函数的参数

  • grad_outputs (tuple of Tensor or Tensor, optional) – 函数输出的梯度。

  • eps (float, optional) – 用于有限差分的扰动

  • atol (float, optional) – 绝对容差

  • rtol (float, optional) – 相对容差

  • gen_non_contig_grad_outputs (bool, optional) – 如果 `grad_outputs` 为 `None` 且 `gen_non_contig_grad_outputs` 为 `True`,则生成的随机梯度输出是非连续的。

  • raise_exception (bool, optional) – 指示在检查失败时是否引发异常。异常会提供关于失败确切性质的更多信息。这在调试 gradchecks 时很有用。

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

  • check_undefined_grad (bool, optional) – 如果为 True,则检查是否支持未定义输出梯度并将其视为零。

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

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

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

返回

如果所有差异都满足 allclose 条件,则返回 True。

返回类型

布尔值