Я использую 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
, чтобы функция потерь и основная функция потерь оценивались независимо?Из этого ответа я узнал , что на самом деле можно использовать единую функцию target_, но я не совсем понимаю, почему это сработает.