为什么fmin_l_bfgs_b允许一个函数同时返回loss和grad而fmin_bfgs却不返回?

时间:2018-12-24 05:37:01

标签: python scipy

我正在使用scipy.optimize来最小化损失函数。

我尝试了fmin_l_bfgs_bfmin_bfgs并发现了一些区别。

当我使用fmin_l_bfgs_b时,可以使用单个函数objective_function来为优化程序返回lossgrad。例如:

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'

我对这两个优化器的工作方式并不了解。我有两个困惑:

  1. objective_function使用像fmin_l_bfgs_b的函数总是安全吗?

  2. fmin_bfgs是否需要对损失函数和损失函数素数进行独立评估?我了解到from this answer,实际上可以使用统一的Objective_Function,但是我并不真正理解为什么这样做会起作用。

0 个答案:

没有答案