Почему fmin_l_bfgs_b разрешает функцию, которая возвращает потери и грады, а fmin_bfgs - нет? - PullRequest
0 голосов
/ 24 декабря 2018

Я использую 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'

Я не знаю слишком много о том, как работают оба оптимизатора.У меня две путаницы:

  1. Всегда ли безопасно использовать функцию, подобную objective_function для fmin_l_bfgs_b?

  2. Требует ли fmin_bfgs, чтобы функция потерь и основная функция потерь оценивались независимо?Из этого ответа я узнал , что на самом деле можно использовать единую функцию target_, но я не совсем понимаю, почему это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...