基于人群的训练 (PBT) 和 HyperOpt 搜索是否可以组合?
AsyncHyperBandScheduler 用于Hyperopt示例ray.tune
这里config为run()
函数设置了一些参数
config = {
"num_samples": 10 if args.smoke_test else 1000,
"config": {
"iterations": 100,
},
"stop": {
"timesteps_total": 100
},
}
space 是Tune Search Algorithm中超参数 Space 的参数,具有hyperopt
以下功能:
space = {
"width": hp.uniform("width", 0, 20),
"height": hp.uniform("height", -100, 100),
"activation": hp.choice("activation", ["relu", "tanh"])
}
algo = HyperOptSearch()
scheduler = AsyncHyperBandScheduler()
run(easy_objective, search_alg=algo, scheduler=scheduler, **config)
然而在Keras 的基于人口的示例中,超参数空间是由Tune Trials Schedulerhyperparam_mutations
内部松散给出的,具有函数numpy
pbt = PopulationBasedTraining(
hyperparam_mutations={
"dropout": lambda: np.random.uniform(0, 1),
"lr": lambda: 10**np.random.randint(-10, 0),
"rho": lambda: np.random.uniform(0, 1)
})
并且 config 以不同的方式使用:
为群体中的个体设置起始参数
run(MemNNModel,scheduler=pbt,
config={
"batch_size": 32,
"epochs": 1,
"dropout": 0.3,
"lr": 0.01,
"rho": 0.9
})
总结一下:
Hyperopt 在 Search Algorithm 中使用超参数空间和hyperopt
函数 基于人口的训练在 Trials Scheduler 中使用超参数空间numpy
两者都使用不同的 Config
从这个答案我认为,Hyperopt 搜索只会考虑已完成的试验。
Hyperopt Search 中的采样超参数和基于人口的训练中的“运行时更改”超参数是否存在冲突?引用:“一次试验可能会在其生命周期内看到许多不同的超参数”