快捷方式

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.Tensor.expand()),则此检查很可能会失败,因为在此类索引处通过点扰动计算的数值梯度会改变共享同一内存地址的所有其他索引处的值。

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

  • inputs (tuple of TensorTensor) – 函数的输入

  • grad_outputs (tuple of TensorTensor, 可选) – 相对于函数输出的梯度。

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

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

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

  • gen_non_contig_grad_outputs (bool, 可选) – 如果 grad_outputsNonegen_non_contig_grad_outputsTrue,则随机生成的梯度输出将被设置为非连续

  • raise_exception (bool, 可选) – 指示检查失败时是否抛出异常。异常会提供关于失败确切性质的更多信息。这在调试 gradcheck 时很有帮助。

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

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

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

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

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

返回值

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

返回类型

bool

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得解答

查看资源