'Reload Keras-Tuner Trials from the directory

I'm trying to reload or access the Keras-Tuner Trials after the Tuner's search has completed for inspecting the results. I'm not able to find any documentation or answers related to this issue.

For example, I set up BayesianOptimization to search for the best hyper-parameters as follows:

## 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)])

I see this creates trial files in the directory kt_dir with project name lstm_dense_bo such as below: Tuner Objects

Now, if I restart my Jupyter kernel, how can I reload these trials into a Tuner object and subsequently inspect the best model or the best hyperparameters or the best trial?

I'd very much appreciate your help. Thank you



Solution 1:[1]

I was trying to do the same thing. I was looking into the keras docs for an easier way than this but could not find one - so if any other SO-ers have a better idea, please let us know!

  1. Load the previous tuner. Make sure overwrite=False or else you'll delete your trials.
workdir = "mlp_202202151345"
obj = "val_recall"
tuner = kt.Hyperband(
    hypermodel=build_model,
    metrics=metrics,
    objective=kt.Objective(obj, direction="min"),
    executions_per_trial=1,
    overwrite=False,
    directory=workdir,
    project_name="keras_tuner",
)
  1. Look for a trial you want to load. Note that TensorBoard works really well for this. In this example, I'm loading 1a38ebaba07b77501999cb1c4ab9413e. 1a38ebaba07b77501999cb1c4ab9413e

  2. Here's the part that I could not find in Keras docs. This might be dependent on the tuner you use (I am using Hyperband):

tuner.oracle.get_trial('1a38ebaba07b77501999cb1c4ab9413e')

Returns a Trial object (also could not find in the docs). The Trial object has a hyperparameters attribute that will return that trial's hyperparameters. Now:

tuner.hypermodel.build(trial.hyperparameters)

Gives you the trial's model for training, evaluation, predictions, etc.

NOTE This seems convuluted and hacky, would love to see a better way.

Solution 2:[2]

using

tuner = kt.BayesianOptimization(build_model,
                         objective='val_categorical_accuracy',
                         max_trials=10,
                         directory='kt_dir',
                         project_name='lstm_dense_bo')

will load the tuner again.

Solution 3:[3]

j7skov has correctly mentioned that you need to reload previous tuner and set the parameter overwrite=False(so that tuner will not overwrite already generated trials).

Further if you want to load first K best models then we need to use tuner's get_best_models method as below

# 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)

Then you can access a specific best model as below

trial_id = 7
model = bo_tuner_best_models[trial_id]

This method is for querying the models trained during the search. For best performance, it is recommended to retrain your Model on the full dataset using the best hyperparameters found during search, which can be obtained using tuner.get_best_hyperparameters().

tuner_best_hyperparameters = tuner.get_best_hyperparameters(num_trials=best_model_count)
best_hp = tuner_best_hyperparameters[trial_id]
model = tuner.hypermodel.build(best_hp)

If you want to just display hyperparameters for the K best models then use tuner's results_summary method as below

tuner.results_summary(num_trials=best_model_count)

For further reference visit this page.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 j7skov
Solution 2 Samaneh
Solution 3