我正在使用scipy.optimize
来最小化损失函数。
我尝试了fmin_l_bfgs_b
和fmin_bfgs
并发现了一些区别。
当我使用fmin_l_bfgs_b
时,可以使用单个函数objective_function
来为优化程序返回loss
和grad
。例如:
from scipy.optimize import fmin_l_bfgs_b as optimizer
def objective_function(model_vector):
#some calculations
return loss, grad
optimizer(objective_function, x0 = model_vector)
但是,这不适用于fmin_bfgs
,如果我使用这样的功能,则会收到错误消息:
TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple'
我对这两个优化器的工作方式并不了解。我有两个困惑:
为objective_function
使用像fmin_l_bfgs_b
的函数总是安全吗?
fmin_bfgs
是否需要对损失函数和损失函数素数进行独立评估?我了解到from this answer,实际上可以使用统一的Objective_Function,但是我并不真正理解为什么这样做会起作用。