1

在我看来,将超频带与贝叶斯优化搜索相结合的自然方法是让搜索算法确定每个括号并让超频带调度程序运行该括号。也就是说,贝叶斯优化搜索每个括号只运行一次。查看Tune源代码,我不清楚 Tune 库是否应用了这种策略。

特别是,我想知道 Tune 库如何处理搜索算法和试验调度程序之间的传递。例如,如果我将 SkOptSearch 和 AsyncHyperBandScheduler(或 HyperBandScheduler)一起调用如下:

sk_search = SkOptSearch(optimizer,
 ['group','dimensions','normalize','sampling_weights','batch_size','lr_adam','loss_weight'],
 max_concurrent=4,
 reward_attr="neg_loss",
 points_to_evaluate=current_params)

hyperband = AsyncHyperBandScheduler(
        time_attr="training_iteration",
        reward_attr="neg_loss",
        max_t=50,
        grace_period=5,
        reduction_factor=2,
        brackets=5
        )

run(Trainable_Dense,
    name='hp_search_0',
    stop={"training_iteration": 9999,
         "neg_loss": -0.2},
    num_samples=75,
    resources_per_trial={'cpu':4,'gpu':1},
    local_dir='./tune_save',
    checkpoint_freq=5,
    search_alg=sk_search,
    scheduler=hyperband,
    verbose=2,
    resume=False,
    reuse_actors=True)

根据上面链接的源代码和此处的源代码,在我看来,sk_search一次最多返回 4 个试验组,但超带应该一次查询sk_search算法以进行N_sizeofbracket试验。

4

1 回答 1

1

Tune 中现在有一个贝叶斯优化 HyperBand 实现 - https://ray.readthedocs.io/en/latest/tune-searchalg.html#bohb

对于标准搜索算法和调度程序,搜索算法目前仅在完成后才能看到试验的结果。

于 2019-08-15T17:38:02.313 回答