【问题标题】:Hyperas not returning best resultHyperas 没有返回最佳结果
【发布时间】:2019-10-25 07:47:54
【问题描述】:

我正在使用 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 结果与优化运行中的最小损失不相符?

【问题讨论】:

    标签: python hyperopt hyperas


    【解决方案1】:

    你有没有想过best_runbest loss不是一回事?

    best_run 返回您的损失的 argmin,对于 f(x) = x**2+x 确实是 x = -1/2best loss 返回它的 min 值,这是f(-1/2) = -1/4

    【讨论】:

    • 哇,这绝对是我的示例代码中的疏忽。我认为 best_run 实际上将输入值返回给函数,但仍然存在问题。我认为我的真实示例仍然存在问题。让我检查一下
    • 重新运行我的代码,我没有看到同样的问题。不知道发生了什么。不过感谢您的回答,绝对帮助了我
    • 实际上仍然看到问题,但现在你已经证明我的示例代码可以工作,我猜它在我自己的代码中
    • 如果你能提供更多关于你的模型的信息,你的真实例子,我也许可以帮助你。现在,我没有看到问题。您是否正在对 NN 进行超参数调整?
    • 不,我正在构建一个堆叠的 xgboost 模型,它结合了几种不同类型的模型。我已经意识到正在发生的事情是 optim.minimize 的输出给了我运行的最后一个输出,而不是表现最好的输出。不知道从那里做什么
    猜你喜欢
    • 2015-06-19
    • 2016-02-25
    • 2017-07-07
    • 2019-07-09
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多