我正在尝试重新加载或访问Keras-Tuner Trials,在Tuner的搜索完成后检查结果。我无法找到任何与此问题相关的文档或答案。
例如,我设置了BayesianOptimization来搜索最佳的超参数,如下所示:
## 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对象,然后检查最好的模型,最好的超参数或最好的试验?
我非常感谢你的帮助。谢谢
发布于 2022-02-16 13:46:54
我也想做同样的事。我在查角文件比这更容易,但找不到一个-所以如果其他人有一个更好的想法,请告诉我们!
overwrite=False,否则你会删除你的试验。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",
)1a38ebaba07b77501999cb1c4ab9413e。
tuner.oracle.get_trial('1a38ebaba07b77501999cb1c4ab9413e')
返回Trial对象(也无法在文档中找到)。Trial对象具有一个超参数属性,该属性将返回该试用版的超参数。现在:
tuner.hypermodel.build(trial.hyperparameters)
给出试验的模型,用于训练、评估、预测等。
注意到这似乎惊慌失措,希望看到一个更好的方法。
发布于 2022-05-08 04:46:22
j7skov正确地提到需要重新加载以前的调谐器并设置参数overwrite=False(这样调谐器就不会覆盖已经生成的测试)。
此外,如果您想先加载K个最佳模型,那么我们需要使用调谐器的get_best_models方法,如下所示
# 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)然后您可以访问特定的最佳模型,如下所示
best_model_id = 7
model = bo_tuner_best_models[best_model_id]该方法用于查询搜索过程中训练的模型。为了获得最佳性能,建议使用搜索过程中发现的最佳超参数在完整的数据集上重新培训您的模型,这些参数可以使用tuner.get_best_hyperparameters()获得。
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方法如下所示
tuner.results_summary(num_trials=best_model_count)欲获得更多参考,请访问这页面。
发布于 2022-07-10 18:38:03
受j7skov的启发,我发现可以通过操作tuner.oracle.trials和tuner.load_model来重新加载模型。
通过将tuner.oracle.trials赋值给一个变量,我们可以发现它是一个dict对象,包含了调优过程中的所有相关试验。字典的键是trial_id,字典的值是Trial对象的实例。或者,我们可以通过使用tuner.oracle.get_best_trials返回最好的几个试验。
为了检查试验的超参数,我们可以使用实例的summary方法。
要加载模型,我们可以将试用实例传递给tuner.load_model。
注意,不同的版本可能导致不兼容。例如,据我所知,keras-tuner==1.0和keras-tuner==1.1之间的目录结构略有不同。
使用您的示例,工作流程可以总结如下。
# 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 modelhttps://stackoverflow.com/questions/67496915
复制相似问题