Ошибка при загрузке модели, сохраненной с помощью callbakcs.ModelCheckpoint () в Keras - PullRequest
0 голосов
/ 11 октября 2018

Я автоматически сохранил свою модель с помощью callbacks.ModelCheckpoint() с файлом HDF5.

# Checkpoint In the /output folder
filepath = "./model/mnist-cnn-best.hd5"

# Keep only a single checkpoint, the best over test accuracy.
checkpoint = keras.callbacks.ModelCheckpoint(filepath, monitor='val_acc', 
                                             verbose=1, save_best_only=True,
                                             mode='max')

# Train
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test),
          callbacks=[checkpoint])

При загрузке модели произошла ошибка.

  model = keras.models.load_model("./mnist-cnn-best.hd5")

  File "D:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\saving.py", line 251, in load_model
    training_config['weighted_metrics'])
KeyError: 'weighted_metrics'

Если я загружаю модель сparam ' compile = False ', все работает правильно.

Я знаю, что нормальный способ сохранения модели в кератах:

from keras.models import load_model

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
del model  # deletes the existing model

# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')

Кстати, эта ошибкаТакже случилось, когда я перевел эту модель на Tensorflow Lite.Но я не знаю, что не так с моей моделью.У кого-нибудь есть идея?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Если вы еще не выяснили ответ на этот вопрос, я думаю, что я его получил.

Я не копался в коде, чтобы точно выяснить, почему, но в основном обратный вызов контрольной точки моделиможно загружать только с помощью функции load_weights(), которая затем используется для оценки.

Если вы хотите сохранить модель, которую вы можете загрузить для дальнейшего обучения, вам необходимо использовать model.save и model.load_model.Надеюсь, пригодится кому-то, кто бродит по этому.

0 голосов
/ 29 апреля 2019

Я обычно использую это следующим образом:

def create_model():
    <my model>
    <model.compile>
    return model
checkpoint = keras.callbacks.ModelCheckpoint(filepath, verbose=<val>, monitor=<val>, save_best_only=True, save_weights_only=True)

classifier = create_model()
classifier.fit(<your parameters>)
classifier.evaluate(<your parameters>)

loaded_model = create_model()
loaded_model.load_weights(filepath)
y_pred = loaded.model.<predict_method>(test_set,verbose=<val>)
'''
0 голосов
/ 29 октября 2018

Я столкнулся с подобной проблемой, которая выдает то же сообщение об ошибке, но причина может отличаться от вашей:

Код: (Tensorflow 1.11 и tf.keras. версия: 2.1.6-tf)

 if load_model_path.endswith('.h5'):
        model = tf.keras.models.load_model(load_model_path)

Сообщение об ошибке:

  File "...../lib/python3.6/site-packages/tensorflow/python/keras/engine/saving.py", line 251, in load_model
    training_config['weighted_metrics'])
KeyError: 'weighted_metrics'

И я обнаружил, что это потому, что модель была сохранена в более старомКерас версия.Мне пришлось закомментировать код, связанный с weighted_metrics, чтобы можно было загрузить модель.Тем не менее, это всего лишь обходной путь, прежде чем я смогу найти устойчивое решение несовпадающей проблемы.Интересно, что @fchollet недавно добавил weighted_metrics к последней версии Keras (октябрь 2018 г.).
https://github.com/keras-team/keras/blob/master/keras/engine/saving.py#L136 Надеюсь, это поможет людям, которые столкнулись с той же проблемой, что и я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...