scipy.optimize.

check_grad#

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

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

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

要检查其导数的函数。

grad可调用 grad(x0, *args)

func 的雅可比矩阵。

x0ndarray

使用 func 检查 grad 相对于 grad 的前向差分近似值时要检查的点。

args*args,可选

传递给 funcgrad 的其他参数。

epsilonfloat,可选

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

directionstr,可选

如果设置为 'random',则沿随机向量的梯度将用于利用 grad 检查有限差分近似,同时使用 func。其默认值为 'all',在这种情况下,将考虑所有独热方向向量来检查 grad。如果 func 是向量函数,则只能使用 'all'

seed{None、int、numpy.random.Generatornumpy.random.RandomState},可选

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

返回:
errfloat

grad(x0, *args) 与使用 func 在点 x0 处计算的 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