Hyperopt 手动更改 Trials() 对象的值;热启动 Hyperopt

Hyperopt Change Values of Trials() Object maually; Warm Start Hyperopt

我正在寻找 Warmstart Hyperopt 的可能性。 一种方法是用超参数手动填充列表 Trials.trials 这实际上是可能的,但我想知道这是否真的会影响优化,或者如果这个 Trials.trials 只是 Trials 对象和 Hyperopt 的可见部分。

trials.trials列表不包含所有信息!! 还必须更改 trials._dynamic_trials,因为 baye.py 中的刷新功能会使用 trials._dynamic_trials

中的数据更新 trials.trials 中的数据

一般热启动应该是可以的。我通过使用一些任意搜索 space 和 objective 函数在一个新的试验对象上调用 fmin,以我的热启动状态的大小创建了一个假的试验对象。 在此之后,可以通过遍历 trials.trials 的长度并设置值来更改试验对象 像这样:

list_of_coldstart_dict = [one_possible_and_evaluation,second_possible_and_evaluation,...]
fake_space = {
'test': 2-hp.loguniform('test_02',0.001, 0.1)
}
def Objective(params):
    return {"loss":0, 'status': STATUS_OK}
trials = Trials()
fmin(Objective,fake_space,
    algo=partial(tpe.suggest, n_startup_jobs=len(list_of_coldstart_dict)), max_evals=len(list_of_coldstart_dicts), 
        trials=new_trials,verbose=1)

for in in range(len(trials.trials):
    trials.trials[i] = list_of_coldstart_dict[i]
    trials._dynamic_trials[i] = list_of_coldstart_dict[i]
    trials.results[i] = trials.trials[i]['result']

注意维护内部字典的必要结构 trials.trials[i]