Keras 3 API documentation / KerasTuner / Oracles / Hyperband Oracle

Hyperband Oracle

[source]

HyperbandOracle class

keras_tuner.oracles.HyperbandOracle(
    objective=None,
    max_epochs=100,
    factor=3,
    hyperband_iterations=1,
    seed=None,
    hyperparameters=None,
    allow_new_entries=True,
    tune_new_entries=True,
    max_retries_per_trial=0,
    max_consecutive_failed_trials=3,
)

Oracle class for Hyperband.

Note that to use this Oracle with your own subclassed Tuner, your Tuner class must be able to handle in Tuner.run_trial three special hyperparameters that will be set by this Tuner:

  • "tuner/trial_id": String, optionally set. The trial_id of the Trial to load from when starting this trial.
  • "tuner/initial_epoch": Int, always set. The initial epoch the Trial should be started from.
  • "tuner/epochs": Int, always set. The cumulative number of epochs this Trial should be trained.

These hyperparameters will be set during the "successive halving" portion of the Hyperband algorithm.

Examples

def run_trial(self, trial, *args, **kwargs):
    hp = trial.hyperparameters
    if "tuner/trial_id" in hp:
        past_trial = self.oracle.get_trial(hp['tuner/trial_id'])
        model = self.load_model(past_trial)
    else:
        model = self.hypermodel.build(hp)

    initial_epoch = hp['tuner/initial_epoch']
    last_epoch = hp['tuner/epochs']

    for epoch in range(initial_epoch, last_epoch):
        self.on_epoch_begin(...)
        for step in range(...):
            # Run model training step here.
        self.on_epoch_end(...)

Arguments

  • objective: A string, keras_tuner.Objective instance, or a list of keras_tuner.Objectives and strings. If a string, the direction of the optimization (min or max) will be inferred. If a list of keras_tuner.Objective, we will minimize the sum of all the objectives to minimize subtracting the sum of all the objectives to maximize. The objective argument is optional when Tuner.run_trial() or HyperModel.fit() returns a single float as the objective to minimize.
  • max_epochs: Integer, the maximum number of epochs to train one model. It is recommended to set this to a value slightly higher than the expected epochs to convergence for your largest Model, and to use early stopping during training (for example, via tf.keras.callbacks.EarlyStopping). Defaults to 100.
  • factor: Integer, the reduction factor for the number of epochs and number of models for each bracket. Defaults to 3.
  • hyperband_iterations: Integer, at least 1, the number of times to iterate over the full Hyperband algorithm. One iteration will run approximately max_epochs * (math.log(max_epochs, factor) ** 2) cumulative epochs across all trials. It is recommended to set this to as high a value as is within your resource budget. Defaults to 1.
  • seed: Optional integer, the random seed.
  • hyperparameters: Optional HyperParameters instance. Can be used to override (or register in advance) hyperparameters in the search space.
  • tune_new_entries: Boolean, whether hyperparameter entries that are requested by the hypermodel but that were not specified in hyperparameters should be added to the search space, or not. If not, then the default value for these parameters will be used. Defaults to True.
  • allow_new_entries: Boolean, whether the hypermodel is allowed to request hyperparameter entries not listed in hyperparameters. Defaults to True.
  • max_retries_per_trial: Integer. Defaults to 0. The maximum number of times to retry a Trial if the trial crashed or the results are invalid.
  • max_consecutive_failed_trials: Integer. Defaults to 3. The maximum number of consecutive failed Trials. When this number is reached, the search will be stopped. A Trial is marked as failed when none of the retries succeeded.