Scipy.optimize check_grad 函数给出 "Unknown keyword arguments: ['args']" 错误

Scipy.optimize check_grad function gives "Unknown keyword arguments: ['args']" error

我想用scipy.optimize.check_grad来评估梯度的正确性。我指定

def func(x, a):
    return x[0]**2 - 0.5 * x[1]**3 + a**2 

def grad(x, a):
        return [2 * x[0], -1.5 * x[1]**2 + 2*a]

from scipy.optimize import check_grad
a = 5 
check_grad(func, grad, [1.5, -1.5], args = (a))

并得到错误

Unknown keyword arguments: ['args']

值得注意的参数在 help file 中列为参数。这应该行不通吗?

*args 只是将位置参数传递给 funcgrad 函数。

您只想传递元参数 a 的值作为 x0 之后的参数。

def func(x, a, b):
    return x[0]**2 - 0.5 * x[1]**3 + a**2 + b

def grad(x, a, b):
        return [2 * x[0], -1.5 * x[1]**2 + 2*a + b]

from scipy.optimize import check_grad
a = 5 
b = 10
check_grad(func, grad, [1.5, -1.5], a, b)

参见 https://github.com/scipy/scipy/blob/a81bc79ba38825139e97b14c91e158f4aabc0bed/scipy/optimize/optimize.py#L736-L737 实现。