首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从目录重新加载Keras-Tuner尝试

从目录重新加载Keras-Tuner尝试
EN

Stack Overflow用户
提问于 2021-05-12 03:21:51
回答 4查看 1.8K关注 0票数 1

我正在尝试重新加载或访问Keras-Tuner Trials,在Tuner的搜索完成后检查结果。我无法找到任何与此问题相关的文档或答案。

例如,我设置了BayesianOptimization来搜索最佳的超参数,如下所示:

代码语言:javascript
复制
## Build Hyper Parameter Search
tuner = kt.BayesianOptimization(build_model,
                     objective='val_categorical_accuracy',
                     max_trials=10,
                     directory='kt_dir',
                     project_name='lstm_dense_bo')

tuner.search((X_train_seq, X_train_num), y_train_cat,
             epochs=30,
             batch_size=64,
             validation_data=((X_val_seq, X_val_num), y_val_cat),
             callbacks=[callbacks.EarlyStopping(monitor='val_loss', patience=3, 
                                                restore_best_weights=True)])

我看到这会在kt_dir目录中创建具有项目名称lstm_dense_bo的试用文件,如下所示:

现在,如果我重新启动我的木星内核,我如何重新加载这些试验到一个Tuner对象,然后检查最好的模型,最好的超参数或最好的试验?

我非常感谢你的帮助。谢谢

EN

回答 4

Stack Overflow用户

发布于 2022-02-16 13:46:54

我也想做同样的事。我在查角文件比这更容易,但找不到一个-所以如果其他人有一个更好的想法,请告诉我们!

  1. 加载前面的调谐器。确保overwrite=False,否则你会删除你的试验。
代码语言:javascript
复制
workdir = "mlp_202202151345"
obj = "val_recall"
tuner = kt.Hyperband(
    hypermodel=build_model,
    metrics=metrics,
    objective=kt.Objective(obj, direction="max"),
    executions_per_trial=1,
    overwrite=False,
    directory=workdir,
    project_name="keras_tuner",
)
  1. 找一个你想要装的试验。请注意,TensorBoard对此非常有效。在本例中,我将加载1a38ebaba07b77501999cb1c4ab9413e
  1. 这是我在Keras文档中找不到的部分。这可能取决于您使用的调谐器(我使用的是超带):

tuner.oracle.get_trial('1a38ebaba07b77501999cb1c4ab9413e')

返回Trial对象(也无法在文档中找到)。Trial对象具有一个超参数属性,该属性将返回该试用版的超参数。现在:

tuner.hypermodel.build(trial.hyperparameters)

给出试验的模型,用于训练、评估、预测等。

注意到这似乎惊慌失措,希望看到一个更好的方法。

票数 3
EN

Stack Overflow用户

发布于 2022-05-08 04:46:22

j7skov正确地提到需要重新加载以前的调谐器并设置参数overwrite=False(这样调谐器就不会覆盖已经生成的测试)。

此外,如果您想先加载K个最佳模型,那么我们需要使用调谐器的get_best_models方法,如下所示

代码语言:javascript
复制
# This will load 10 best hyper tuned models with the weights 
# corresponding to their best checkpoint (at the end of the best epoch of best trial).
best_model_count = 10
bo_tuner_best_models = tuner.get_best_models(num_models=best_model_count)

然后您可以访问特定的最佳模型,如下所示

代码语言:javascript
复制
best_model_id = 7
model = bo_tuner_best_models[best_model_id]

该方法用于查询搜索过程中训练的模型。为了获得最佳性能,建议使用搜索过程中发现的最佳超参数在完整的数据集上重新培训您的模型,这些参数可以使用tuner.get_best_hyperparameters()获得。

代码语言:javascript
复制
tuner_best_hyperparameters = tuner.get_best_hyperparameters(num_trials=best_model_count)
best_hp = tuner_best_hyperparameters[best_model_id]
model = tuner.hypermodel.build(best_hp)

如果您只想显示K最佳模型的超参数,请使用调谐器的results_summary方法如下所示

代码语言:javascript
复制
tuner.results_summary(num_trials=best_model_count)

欲获得更多参考,请访问页面。

票数 1
EN

Stack Overflow用户

发布于 2022-07-10 18:38:03

受j7skov的启发,我发现可以通过操作tuner.oracle.trialstuner.load_model来重新加载模型。

通过将tuner.oracle.trials赋值给一个变量,我们可以发现它是一个dict对象,包含了调优过程中的所有相关试验。字典的键是trial_id,字典的值是Trial对象的实例。或者,我们可以通过使用tuner.oracle.get_best_trials返回最好的几个试验。

为了检查试验的超参数,我们可以使用实例的summary方法。

要加载模型,我们可以将试用实例传递给tuner.load_model

注意,不同的版本可能导致不兼容。例如,据我所知,keras-tuner==1.0keras-tuner==1.1之间的目录结构略有不同。

使用您的示例,工作流程可以总结如下。

代码语言:javascript
复制
# Recreate the tuner object
tuner = kt.BayesianOptimization(build_model,
            objective='val_categorical_accuracy',
            max_trials=10,
            directory='kt_dir',
            project_name='lstm_dense_bo',
            overwrite=False)

# Return all trials from the oracle
trials = tuner.oracle.trials

# Print out the ID and the score of all trials
for trial_id, trial in trials.items():
    print(trial_id, trial.score)

# Return best 5 trials
best_trials = tuner.oracle.get_best_trials(num_trials=5)
for trial in best_trials:
    trial.summary()
    model = tuner.load_model(trial)
    # Do some stuff to the model
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67496915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档