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