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)[源代码]#
使用有限小扰动法检查相对于
inputs
和grad_outputs
的梯度(这些梯度是浮点数或复数类型且requires_grad=True
)的二阶导数是否与解析梯度相符。此函数检查通过计算给定的
grad_outputs
的梯度进行反向传播是否正确。数值梯度与解析梯度之间的比较使用
allclose()
。注意
默认值是为双精度
input
和grad_outputs
设计的。如果它们的精度较低(例如FloatTensor
),此检查很可能会失败。警告
如果
input
和grad_outputs
中的任何一个被检查的张量具有重叠内存,即不同的索引指向相同的内存地址(例如,来自torch.Tensor.expand()
),此检查很可能会失败,因为在这些索引处的数值梯度通过点扰动计算时会改变共享相同内存地址的所有其他索引的值。- 参数
func (function) – 一个 Python 函数,它接受 Tensor 输入并返回一个 Tensor 或一个 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。
- 返回类型