scipy.optimize.

check_grad#

scipy.optimize.check_grad(func, grad, x0, *args, epsilon=np.float64(1.4901161193847656e-08), direction='all', seed=None)[源代码][源代码]#

通过将其与梯度的(前向)有限差分近似进行比较,检查梯度函数的正确性。

参数:
func : 可调用对象 func(x0, *args)可调用

要检查导数的函数。

grad : 可调用 grad(x0, *args)可调用

func 的雅可比矩阵。

x0ndarray

检查 grad 与使用 func 进行的前向差分近似。

参数 : *args, 可选*args, 可选

传递给 funcgrad 的额外参数。

epsilonfloat, 可选

用于有限差分近似的步长。它默认为 sqrt(np.finfo(float).eps),大约是 1.49e-08。

方向str, 可选

如果设置为 'random' ,则使用沿随机向量的梯度来检查 grad 与使用 func 进行前向差分近似。默认情况下为 'all' ,在这种情况下,所有独热方向向量都被考虑来检查 grad 。如果 func 是一个向量值函数,则只能使用 'all'

seed : {None, int, numpy.random.Generator, numpy.random.RandomState}, 可选{None, int,}

如果 seed 是 None(或 np.random),则使用 numpy.random.RandomState 单例。如果 seed 是 int,则使用一个新的 RandomState 实例,并使用 seed 进行种子设定。如果 seed 已经是 GeneratorRandomState 实例,则使用该实例。指定 seed 以重现此函数的返回值。使用此种子生成的随机数会影响用于检查 grad 的梯度计算的随机向量。请注意,仅当 direction 参数设置为 ‘random’ 时,才会使用 seed

返回:
错误浮动

差值 grad(x0, *args) 与在点 x0 处使用函数 func 的有限差分近似 grad 的平方和的平方根(即 2-范数)。

参见

approx_fprime

示例

>>> import numpy as np
>>> def func(x):
...     return x[0]**2 - 0.5 * x[1]**3
>>> def grad(x):
...     return [2 * x[0], -1.5 * x[1]**2]
>>> from scipy.optimize import check_grad
>>> check_grad(func, grad, [1.5, -1.5])
2.9802322387695312e-08  # may vary
>>> rng = np.random.default_rng()
>>> check_grad(func, grad, [1.5, -1.5],
...             direction='random', seed=rng)
2.9802322387695312e-08