Гиперы не дают лучшего результата
Я использую гиперы для оптимизации функции, и это не дает наилучшего результата. Во время выполнения распечатка выглядит следующим образом
100%|██████████| 100/100 [7:01:47<00:00, 411.15s/it, best loss: 5.1005506645909895e-05]
но потом, когда я распечатываю результаты лучшей модели, я получаю
5.8413380939757486e-05
Это случалось уже пару раз, и я не понимаю, почему. Я написал воспроизводимый пример, и у меня такая же проблема.
def test_function():
x={{uniform(-23,23)}}
function=x**2+x
return {'loss': function, 'status': STATUS_OK, 'model': function}
###just a dummy function to get the optimization to run, my real function uses real data
def data_example():
print('skip')
return [0,1,2]
trials=Trials()
# trials=pickle.load(open(trials_file, "rb"))
print('started new set of optimization runs')
if __name__ == '__main__':
best_run, best_model = optim.minimize(model=test_function,
data=data_example,
algo=tpe.suggest,
trials=trials,
max_evals=100)
print(best_run)
В прошлый раз, когда я запускал это, строка состояния показывала
100%|██████████| 100/100 [00:00<00:00, 498.77it/s, best loss: -0.24773021221244024]
и print(best_run)
показал
{'x': -0.5476422899067598}
почему мой best_run
результат не подкладывается с наименьшими потерями в ходе оптимизации?
1 ответ
Решение
Вы считали, что best_run
а также best loss
это не одно и то же?
best_run
возвращает argmin вашей потери, который действительно был быx = -1/2
за f(x) = x**2+x
а также best loss
возвращает минимальное значение для него, котороеf(-1/2) = -1/4
.