0

I am trying to use Keras Tuner to do hyperparameter tuning on a regression ANN. When I do a hyperparameter search, I receive KeyError: 'val_mean_absolute_error.

Here is my code:

def build_model(hp):
    model = keras.Sequential()
    for i in range(hp.Int('num_layers', 2, 20)):
        model.add(layers.Dense(
            units=hp.Int('units_' + str(i), min_value=32, max_value=512, step=32),
            activation='relu'
        ))
        if hp.Boolean("dropout"):
            model.add(layers.Dropout(rate=0.5))
    model.add(layers.Dense(1, activation='linear'))
    model.compile(
        optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', [1e-4, 1e-3, 1e-5])),
        loss='mean_absolute_error',
        metrics=['mean_absolute_error']
    )
    return model

tuner = kt.RandomSearch(
    build_model,
    objective='val_mean_absolute_error',
    max_trials=5,
    executions_per_trial=2,
    overwrite=True,
    directory="Local Files",
    project_name="Keras")

tuner.search(x_train, y_train, epochs=1)

After one model is trained, I get this error:

Traceback (most recent call last):
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\base_tuner.py", line 266, in _try_run_and_update_trial
    self._run_and_update_trial(trial, *fit_args, **fit_kwargs)
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\base_tuner.py", line 257, in _run_and_update_trial
    tuner_utils.convert_to_metrics_dict(
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 270, in convert_to_metrics_dict
    [convert_to_metrics_dict(elem, objective) for elem in results]
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 270, in <listcomp>
    [convert_to_metrics_dict(elem, objective) for elem in results]
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 283, in convert_to_metrics_dict
    best_value, _ = _get_best_value_and_best_epoch_from_history(
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 254, in _get_best_value_and_best_epoch_from_history
    objective_value = objective.get_value(metrics)
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\objective.py", line 57, in get_value
    return logs[self.name]
KeyError: 'val_mean_absolute_error'

I've been unable to find this error anywhere, and I have duplicated code from multiple examples, all which throw this same error. What is happening here?

Tim
  • 1
  • 1

1 Answers1

0

I had similar problem. In my case, using metrics=['accuracy'] instead of metrics=['binary_accuracy'] helped resolve the issue.

Kyle F Hartzenberg
  • 2,567
  • 3
  • 6
  • 24