latest (dev)
Copy
Latest development documentation · Updated 2026-10-15
tensorplay.autograd.gradcheck.gradcheck
- tensorplay.autograd.gradcheck.gradcheck(func, inputs, *, eps: float = 1e-06, atol: float = 1e-05, rtol: float = 0.001, raise_exception: bool = True, nondet_tol: float = 0.0, check_undefined_grad: bool = True, check_grad_dtypes: bool = False, check_batched_grad: bool = False, check_batched_forward_grad: bool = False, check_forward_ad: bool = False, check_backward_ad: bool = True, fast_mode: bool = False, masked: bool | None = None) bool[source]
Check gradients computed via small finite differences against analytical gradients wrt tensors in
inputsthat are of floating point or complex type and withrequires_grad=True.The check between numerical and analytical gradients uses
allclose().For most of the complex functions we consider for optimization purposes, no notion of Jacobian exists. Instead, gradcheck verifies if the numerical and analytical values of the Wirtinger and Conjugate Wirtinger derivatives are consistent. Because the gradient computation is done under the assumption that the overall function has a real-valued output, we treat functions with complex output in a special way. For these functions, gradcheck is applied to two real-valued functions corresponding to taking the real components of the complex outputs for the first, and taking the imaginary components of the complex outputs for the second.
Note
The default values are designed for
inputof double precision. This check will likely fail ifinputis of less precision, e.g.,FloatTensor.Note
Gradcheck may fail when evaluated on non-differentiable points because the numerically computed gradients via finite differencing may differ those computed analytically (not necessarily because either is incorrect).
Warning
If any checked tensor in
inputhas overlapping memory, i.e., different indices pointing to the same memory address (e.g., fromexpand), this check will likely fail because the numerical gradients computed by point perturbation at such indices will change values at all other indices that share the same memory address.- Parameters:
func (function) – a Python function that takes Tensor inputs and returns a Tensor or a tuple of Tensors
eps (float, optional) – perturbation for finite differences
atol (float, optional) – absolute tolerance
rtol (float, optional) – relative tolerance
raise_exception (bool, optional) – indicating whether to raise an exception if the check fails. The exception gives more information about the exact nature of the failure. This is helpful when debugging gradchecks.
nondet_tol (float, optional) – tolerance for non-determinism. When running identical inputs through the differentiation, the results must either match exactly (default, 0.0) or be within this tolerance.
check_undefined_grad (bool, optional) – if
True, check if undefined output grads are supported and treated as zeros, forTensoroutputs.check_grad_dtypes (bool, optional) – if
True, check that the gradient dtypes match the ones from the numerical computation. Defaults toFalse.check_batched_grad (bool, optional) – if
True, check if we can compute batched gradients usingtensorplay.vmap(). Defaults to False.check_batched_forward_grad (bool, optional) – if
True, checks if we can compute batched forward gradients using forward ad andtensorplay.vmap(). Defaults toFalse.check_forward_ad (bool, optional) – if
True, check that the gradients computed with forward mode AD match the numerical ones. Defaults toFalse.check_backward_ad (bool, optional) – if
False, do not perform any checks that rely on backward mode AD to be implemented. Defaults toTrue.fast_mode (bool, optional) – if
True, compare the jacobians projected onto random vectors instead of element by element, which costs one backward (or forward) pass per output instead of one per output element. Defaults toFalse.masked (bool, optional) – if
True, the gradients of unspecified elements of sparse tensors are ignored. Defaults toFalse.
- Returns:
Trueif all differences satisfy allclose condition
Help improve this page
Found an error, an unclear step, or a missing example?

