1

基于人群的训练 (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 中的采样超参数和基于人口的训练中的“运行时更改”超参数是否存在冲突?引用:“一次试验可能会在其生命周期内看到许多不同的超参数”

4

0 回答 0