我对使用 SciPy 比较陌生;我目前正在使用它来最小化多层感知器模型的成本函数。我不能使用 scikit-learn,因为我需要能够设置系数(它们在 MLPClassifer 中是只读的)并向任何和所有参数添加随机排列和噪声。我还没有完成实现,但是我对最小化函数所需的参数感到困惑。
例如,我编写了一个函数来计算函数的“成本”(最小化能量),它同时计算梯度。这没什么特别的,因为它是常见的做法。然而,当调用 scipy.optimize.minimize 时,它要求两个不同的函数:一个返回要最小化的标量(即,在我的例子中的成本),另一个计算当前状态的梯度。例子:
j,grad = myCostFunction(X,y)
除非我弄错了,否则它似乎需要调用我的函数两次,每次调用都需要指定返回成本或梯度,如下所示:
opt = scipy.optimize.minimize(fun=myJFunction, jac=myGradFunction, args = args,...)
这不是浪费计算时间吗?我的数据集将有超过 100 万个样本和 10 个特征,因此减少冗余计算将是首选,因为我将为我的项目训练和重新训练这个东西数万次。
另一个混淆点是 args 输入。参数是否像这样传递:
# This is what I expect happens
myJFunction(x0,*args)
myGradFunction(x0,*args)
或像这样:
# This is what I wish it did
myJFunction(x0,arg0,arg1,arg2)
myGradFunction(x0,arg3,arg4,arg5)
提前致谢!