torch.autograd.gradcheck.gradcheck¶
- torch.autograd.gradcheck.gradcheck(func, inputs, *, eps=1e-06, atol=1e-05, rtol=0.001, raise_exception=True, nondet_tol=0.0, check_undefined_grad=True, check_grad_dtypes=False, check_batched_grad=False, check_batched_forward_grad=False, check_forward_ad=False, check_backward_ad=True, fast_mode=False, masked=None)[源代码][源代码]¶
检查通过小的有限差分计算的梯度与
inputs
中浮点或复数类型且requires_grad=True
的张量对应的解析梯度是否一致。数值梯度与解析梯度之间的检查使用
allclose()
。对于大多数出于优化目的而考虑的复数函数,没有雅可比矩阵的概念。相反,gradcheck 会验证 Wirtinger 和共轭 Wirtinger 导数的数值和解析值是否一致。由于梯度计算是在函数整体具有实数值输出的假设下进行的,因此我们对具有复数输出的函数进行特殊处理。对于这些函数,gradcheck 应用于两个实值函数,分别对应于取复数输出的实部和虚部。有关更多详细信息,请参阅 复数的 Autograd。
注解
默认值是针对双精度
input
设计的。如果input
精度较低,例如FloatTensor
,则此检查可能会失败。注解
在不可微点上求值时,Gradcheck 可能会失败,因为通过有限差分计算的数值梯度可能与解析计算的梯度不同(不一定是因为其中一个不正确)。有关更多背景信息,请参阅 不可微函数的梯度。
警告
如果
input
中任何被检查的张量具有重叠内存,即不同索引指向同一内存地址(例如,来自torch.Tensor.expand()
),则此检查很可能会失败,因为通过点扰动在这些索引处计算的数值梯度将改变共享同一内存地址的所有其他索引处的值。- 参数
func (function) – 接受张量输入并返回张量或张量元组的 Python 函数
eps (float, 可选) – 有限差分的扰动量
atol (float, 可选) – 绝对容差
rtol (float, 可选) – 相对容差
raise_exception (bool, 可选) – 指示如果检查失败是否抛出异常。异常提供了有关失败确切性质的更多信息。这有助于调试 gradchecks。
nondet_tol (float, 可选) – 非确定性容差。当通过相同的输入运行微分时,结果必须完全匹配(默认值 0.0)或在此容差范围内。
check_undefined_grad (bool, 可选) – 如果为
True
,检查是否支持未定义的输出梯度并将其视为零(对于Tensor
输出)。check_batched_grad (bool, 可选) – 如果为
True
,检查是否可以使用原型 vmap 支持计算批量梯度。默认为 False。check_batched_forward_grad (bool, 可选) – 如果为
True
,检查是否可以使用前向模式 AD 和原型 vmap 支持计算批量前向梯度。默认为False
。check_forward_ad (bool, 可选) – 如果为
True
,检查使用前向模式 AD 计算的梯度是否与数值梯度匹配。默认为False
。check_backward_ad (bool, 可选) – 如果为
False
,则不执行任何依赖于后向模式 AD 实现的检查。默认为True
。fast_mode (bool, 可选) – gradcheck 和 gradgradcheck 的快速模式目前仅为 R 到 R 函数实现。如果输入和输出都不是复数,则运行一个不再计算整个雅可比矩阵的更快的 gradcheck 实现;否则,回退到慢速实现。
masked (bool, 可选) – 如果为
True
,则忽略稀疏张量未指定元素的梯度。默认为False
。
- 返回
True
如果所有差异都满足 allclose 条件- 返回类型