我有一个像这样的类对象和实例方法。
class Neural:
def __init__(self, params, X, y, lambda1):
---
def costFunction(self):
---
return J
def backPropogate(self):
---
return grad_back
我正在尝试使用scipy.optimize.minimize
调用这些函数result = opt.minimize(Neural(params_init, X, y, 1).costFunction(), x0=params_init, method='CG',
jac=Neural(params_init, X, y, 1).backPropogate())
我一直在
具有多个元素的数组的真值是不明确的
我试过不用()调用函数,但我得到(这在我看来最正确):
init ()缺少1个必需的位置参数:' lambda1'
我尝试过使用这样的args:
result = opt.minimize(Neural.costFunction, x0=params_init, args=(X, y, 1), method='CG',
jac=Neural.backPropogate)
但args参数是为类的函数而不是对象本身识别的。如果我像这个Neural.costFunction()那样调用函数,我得到
缺少位置要求"自我"
答案 0 :(得分:0)
您提供给minimize
的功能应该采用x
,形状类似x0
的变量,以及您通过args
传递的值。 minimize
会在搜索时逐步执行各种x
,但每次都会传递相同的*args
。
如果您将课程更改为:
class Neural:
def __init__(self, X, y, lambda1):
---
def costFunction(self, params):
---
return J
您应该能够将其用作:
myobj = Neural(X, y, 1)
opt.minimize(myobj.costFunction, x0=params_init, method='CG',jac=myobj.backPropogate)
backPropogate
需要进行类似的调整。
我会通过像
之类的电话来测试它Neural(X, y, 1).costFunction(params_init)
使用args,
costFunction needs to accept
X,y,lambda1`,例如:
....
def costFunction(self, params, X, y, lambda1):
并使用Neural().costFunction
创建。