在 Keras 中加载由 callbakcs.ModelCheckpoint() 保存的模型时出错
Error in load a model saved by callbakcs.ModelCheckpoint() in Keras
我通过 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'
如果我使用参数“compile=False”加载模型,它会正常工作。
我知道在keras中保存模型的正常方法是:
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转换这个模型的时候也出现了这个错误。
但是我不知道我的模型有什么问题。
有人有想法吗?
我遇到了一个类似的问题,它产生了相同的错误消息,但原因可能与您的不同:
代码:(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'
我发现这是因为模型保存在较旧的 Keras 版本中。
我不得不注释掉与 weighted_metrics
相关的代码才能加载模型。但是,在我找到不匹配问题的可持续解决方案之前,这只是一种解决方法。有趣的是,@fchollet
最近(2018 年 10 月)刚刚将 weighted_metrics
添加到最新的 Keras 版本中。
https://github.com/keras-team/keras/blob/master/keras/engine/saving.py#L136
希望对和我遇到同样问题的人有所帮助
如果你还没有找到答案,我想我已经找到了。
具体原因我没有深入研究,但基本上模型检查点回调只能用load_weights()
函数加载,然后用于评估。
如果你想保存一个模型以便稍后再次训练,你需要使用 model.save
和 model.load_model
。希望对徘徊于此的人有所帮助。
我平时的使用方式是这样的:
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>)
'''
我通过 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'
如果我使用参数“compile=False”加载模型,它会正常工作。
我知道在keras中保存模型的正常方法是:
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转换这个模型的时候也出现了这个错误。 但是我不知道我的模型有什么问题。 有人有想法吗?
我遇到了一个类似的问题,它产生了相同的错误消息,但原因可能与您的不同:
代码:(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'
我发现这是因为模型保存在较旧的 Keras 版本中。
我不得不注释掉与 weighted_metrics
相关的代码才能加载模型。但是,在我找到不匹配问题的可持续解决方案之前,这只是一种解决方法。有趣的是,@fchollet
最近(2018 年 10 月)刚刚将 weighted_metrics
添加到最新的 Keras 版本中。
https://github.com/keras-team/keras/blob/master/keras/engine/saving.py#L136
希望对和我遇到同样问题的人有所帮助
如果你还没有找到答案,我想我已经找到了。
具体原因我没有深入研究,但基本上模型检查点回调只能用load_weights()
函数加载,然后用于评估。
如果你想保存一个模型以便稍后再次训练,你需要使用 model.save
和 model.load_model
。希望对徘徊于此的人有所帮助。
我平时的使用方式是这样的:
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>)
'''