2016-10-27 4 views
1

scipy.optimize.check_gradを使用してグラジェントの正確性を評価します。私はScipy.optimize check_grad関数は、「Unknown keyword arguments:['args']」というエラーを返します。

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でargumetとしてリストされているエラーが発生します。これは動作しませんか?

+0

['* args'](http://stackoverflow.com/questions/3394835/args-and-kwargs)は、関数の定義における' args'とは異なります。この場合、あなたが提供すべきものは 'check_grad(func、grad、[1.5、-1.5]、a)'です。 – Stelios

答えて

1

*argsは、位置argsをfuncgrad関数に渡します。

x0の後の引数として、メタパラメータの値aを渡すだけです。

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を参照してください。

+0

しかし、 'func'に渡す引数が複数ある場合、どうすればいいですか?たとえば、 'func'に' b'を追加し、 'check_grad(func、grad、x0 = [3、-3]、a、b)'を呼び出すと ''キーワード引数に続く位置引数 ''が返されます – tomka

+0

argリストに 'x0'という名前を付けることはできません。 'x0 ='を削除すると、複数の引数を渡しても問題ありません。 'x0'という名前をつけると、pythonはあなたが' 'kwargs'に移ったと考えます。 –

+0

これは非常に微妙です。今、私は分かる。 – tomka

関連する問題