从 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
skopt 的 gp_minimize() 函数引发 ValueError: array must not contain infs or NaNs