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, 可选
传递给 func 和 grad 的额外参数。
- 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 已经是Generator或RandomState实例,则使用该实例。指定 seed 以重现此函数的返回值。使用此种子生成的随机数会影响用于检查grad的梯度计算的随机向量。请注意,仅当 direction 参数设置为 ‘random’ 时,才会使用 seed。
- func : 可调用对象
- 返回:
- 错误浮动
差值
grad(x0, *args)与在点 x0 处使用函数 func 的有限差分近似 grad 的平方和的平方根(即 2-范数)。
示例
>>> 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