2016-10-27 2 views
1

scipy.optimize.check_grad을 사용하여 기울기의 정확성을 평가하고 싶습니다. 나는 오류에게 help file에 argumet로 표시됩니다Scipy.optimize check_grad 함수가 "알 수없는 키워드 인수를 제공합니다 : [ 'args']"오류

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)) 

를 지정하고 얻을. 이거 작동하지 않아야합니까?

+0

['* args'] (http://stackoverflow.com/questions/3394835/args-and-kwargs)는 함수 정의에서 args와 다릅니다. 이 경우, 당신이 제공해야하는 것은'check_grad (func, grad, [1.5, -1.5], a)'이다. – Stelios

답변

1

*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'을 arg리스트에 넣을 수 없습니다. 'x0 ='을 제거하면 여러 인수를 전달하는 데 문제가 없습니다. 'x0'라는 이름을 쓸 때, 파이썬은 여러분이''kwargs'로 옮겼다 고 생각합니다. –

+0

이것은 매우 미묘합니다. 지금은 이해. – tomka

관련 문제