Как разрешить KeyError: 'val_mean_absolute_error' Keras 2.3.1 и TensorFlow 2.0 из Chollet Deep Learning с Python - PullRequest
1 голос
/ 04 февраля 2020

Я нахожусь в разделе 3.7 книги Чоллет Глубокое обучение с Python. Проект состоит в том, чтобы найти среднюю цену на дома в данном пригороде Бостона в 1970-х годах.

https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/3.7-predicting-house-prices.ipynb

В разделе «Подтверждение нашего подхода с использованием K-кратной проверки» я пытаюсь запустить этот блок кода:

num_epochs = 500
all_mae_histories = []
for i in range(k):
    print('processing fold #', i)
    # Prepare the validation data: data from partition # k
    val_data = train_data[i * num_val_samples: (i + 1) * num_val_samples]
    val_targets = train_targets[i * num_val_samples: (i + 1) * num_val_samples]

    # Prepare the training data: data from all other partitions
    partial_train_data = np.concatenate(
        [train_data[:i * num_val_samples],
         train_data[(i + 1) * num_val_samples:]],
        axis=0)
    partial_train_targets = np.concatenate(
        [train_targets[:i * num_val_samples],
         train_targets[(i + 1) * num_val_samples:]],
        axis=0)

    # Build the Keras model (already compiled)
    model = build_model()
    # Train the model (in silent mode, verbose=0)
    history = model.fit(partial_train_data, partial_train_targets,
                        validation_data=(val_data, val_targets),
                        epochs=num_epochs, batch_size=1, verbose=0)
    mae_history = history.history['val_mean_absolute_error']
    all_mae_histories.append(mae_history)

Я получаю сообщение об ошибке KeyError: 'val_mean_absolute_error'

mae_history = history.history['val_mean_absolute_error']

Я предполагаю, что решение состоит в том, чтобы найти правильный параметр для замены val_mean_absolute_error. Я попытался заглянуть в какую-то документацию Keras, чтобы найти правильное значение ключа. Кто-нибудь знает правильное значение ключа?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2020

Проблема в вашем коде заключается в том, что при компиляции модели вы не добавляете спецификацию c 'mae' metri c.

Если вы хотите добавить 'mae 'metri c в вашем коде, вам нужно сделать так:

  1. model.compile('sgd', metrics=[tf.keras.metrics.MeanAbsoluteError()])
  2. model.compile('sgd', metrics=['mean_absolute_error'])

После На этом шаге вы можете попытаться определить, является ли правильное имя val_mean_absolute_error или val_mae. Скорее всего, если вы скомпилируете свою модель, как я продемонстрировал в варианте 2, ваш код будет работать с "val_mean_absolute_error".

Кроме того, вы также должны поместить фрагмент кода туда, где вы компилируете свою модель, он отсутствует в тексте вопроса сверху (т.е. функция build_model())

1 голос
/ 15 февраля 2020

Я заменил 'val_mean_absolute_error' на 'val_mae', и это сработало для меня

0 голосов
/ 16 апреля 2020

Я обновляю его по строке кода:

   mae_history = history.history["mae"]
...