Hyperas没有返回最佳结果

时间:2019-10-25 07:47:54

标签: python hyperopt hyperas

我正在使用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 :(得分:0)

您是否认为antennas = [] 0.upto(15) { |i| antennas.push(i + 1) if (0x2211 & (1 << i)) != 0 } antennas #=> [1, 5, 10, 14] best_run是不同的东西?

best loss返回损失的 argmin ,对于best_run而言确实是x = -1/2,而f(x) = x**2+x返回损失的 min < / em>的值,即best loss