我在寻找Warmstart Hyperopt的可能性。一种方法是用超参数手动填充列表Trials.trials这实际上是可能的,但我想知道这是否真的会影响优化,或者如果这个Trials.trials只是Trials对象和Hyperopt的可视部分。
发布于 2020-02-22 03:58:56
trials.trials列表没有包含所有信息!!还必须更改trials._dynamic_trials,因为baye.py中的刷新函数会使用trials.trials中的数据更新trials._dynamic_trials中的数据
一般来说,热启动应该是可能的。我在一个具有任意搜索空间和目标函数的新鲜trials对象上调用fmin,从而创建了一个与我的热启动状态大小相同的伪trials对象。在此之后,可以通过迭代trials.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.trialsi中维护字典的必然结构
https://stackoverflow.com/questions/60339842
复制相似问题