Гиперас не возвращает лучший результат - PullRequest
1 голос
/ 25 октября 2019

Я использую Hyperas для оптимизации функции, и она не возвращает лучший результат. Во время прогона распечатка читается следующим образом:

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 Ответ

0 голосов
/ 25 октября 2019

Считаете ли вы, что best_run и best loss - это не одно и то же?

best_run возвращает argmin вашего проигрыша, который действительно будет x = -1/2 дляf(x) = x**2+x и best loss возвращает для него значение min , которое равно f(-1/2) = -1/4.

...