从 Skopt 中的检查点恢复 gp_minimize 进程

Posted

技术标签:

【中文标题】从 Skopt 中的检查点恢复 gp_minimize 进程【英文标题】:Resume a gp_minimize process from a checkpoint in Skopt 【发布时间】:2020-10-11 11:12:35 【问题描述】:

我想恢复一个 gp 进程,但我收到了奇怪的消息。我开始我的 gp 进程,只提供 x0 和 y0=None。我的初始点是 30 和 n_evals = 50。我在第 20 次评估时停止它。然后我加载结果并按照我提供的文档中的示例 x0 和 y0(两者都是列表列表)并运行相同的过程。 (我已经重新启动了内核 obv。)但是,即使在评估之后也没有。 12 消息是:Iteration No: 13 开始。在随机点评估函数。它应该在哪里寻找下一个最佳点。

我做错了吗?

x0 = res.x_iters
y0 = res.func_vals


gp_res = gp_minimize(func=fitness,                             
                            dimensions=space,
                            n_calls=50,
                            n_jobs=-1,
                            n_initial_points=30,
                            initial_point_generator=lhs,
                            verbose=True,
                            acq_func='gp_hedge',
                            acq_optimizer='lbfgs',
                            n_restarts_optimizer=15,
                            y0=y0,
                            random_state=seed,
                            callback=[checkpoint_callback,delta_callback],
                            n_points=10000,   
                            kappa=1.96,      
                            xi=0.01,           
                            noise='gaussian',
                            model_queue_size=None,
                            x0=x0)

【问题讨论】:

我看到了同样的行为。我认为一定有一个错误,因为它似乎正在重新评估 x0 和 y0 的所有点。 【参考方案1】:

有类似的问题。在寻找答案时,我在 GitHub 页面上偶然发现了这个问题:https://github.com/scikit-optimize/scikit-optimize/issues/949

建议是“将 n_initial_points 的值设置为 res0.x_iters 中值数量的负数”,这似乎对我有用。

在你的情况下,我认为它看起来像这样:

x0 = res.x_iters
y0 = res.func_vals


gp_res = gp_minimize(func=fitness,                             
                            dimensions=space,
                            n_calls=50,
                            n_jobs=-1,
                          ->n_initial_points=-len(x0),
                            initial_point_generator=lhs,
                            verbose=True,
                            acq_func='gp_hedge',
                            acq_optimizer='lbfgs',
                            n_restarts_optimizer=15,
                            y0=y0,
                            random_state=seed,
                            callback=[checkpoint_callback,delta_callback],
                            n_points=10000,   
                            kappa=1.96,      
                            xi=0.01,           
                            noise='gaussian',
                            model_queue_size=None,
                            x0=x0)

【讨论】:

以上是关于从 Skopt 中的检查点恢复 gp_minimize 进程的主要内容,如果未能解决你的问题,请参考以下文章

skopt BayesSearchCV 中的 n_points 是如何工作的?

使用 skopt 优化超参数 hidden_​​layer_size MLPClassifier

无法从 keras 中的检查点模型恢复训练

可以限制 skopt.Lhs.generate 的结果吗?

skopt 的 gp_minimize() 函数引发 ValueError: array must not contain infs or NaNs

在带有 sklearn/Keras 的神经网络上使用 skopt 进行超参数优化