我试图从我训练过的模型中保存并加载权重。
用于保存模型的代码是。
TensorBoard(log_dir='/output')
model.fit_generator(image_a_b_gen(batch_size), steps_per_epoch=1, epochs=1)
model.save_weights('model.hdf5')
model.save_weights('myModel.h5')
让我知道这是不正确的方法,或者是否有更好的方法。
但是当我尝试加载它们时,使用它,
from keras.models import load_model
model = load_model('myModel.h5')
但是我收到了这个错误:
ValueError Traceback (most recent call
last)
<ipython-input-7-27d58dc8bb48> in <module>()
1 from keras.models import load_model
----> 2 model = load_model('myModel.h5')
/home/decentmakeover2/anaconda3/lib/python3.5/site-
packages/keras/models.py in load_model(filepath, custom_objects, compile)
235 model_config = f.attrs.get('model_config')
236 if model_config is None:
--> 237 raise ValueError('No model found in config file.')
238 model_config = json.loads(model_config.decode('utf-8'))
239 model = model_from_config(model_config,
custom_objects=custom_objects)
ValueError: No model found in config file.
有关我可能做错的任何建议? 提前谢谢。
答案 0 :(得分:51)
以下是YouTube视频,其中详细说明了您想要做的事情:Save and load a Keras model
Keras提供三种不同的保存方法。这些在上面的视频链接(带有示例)以及下面进行了描述。
首先,您收到错误的原因是因为您错误地调用了load_model
。
要保存并加载模型的权重,首先要使用
model.save_weights('my_model_weights.h5')
保存权重,如您所示。要加载权重,首先需要构建模型,然后在模型上调用load_weights
,如
model.load_weights('my_model_weights.h5')
另一种保存技术是model.save(filepath)
。此save
功能可以保存:
要加载此已保存的模型,请使用以下命令:
from keras.models import load_model
new_model = load_model(filepath)'
最后,model.to_json()
仅保存模型的体系结构。要加载架构,您可以使用
from keras.models import model_from_json
model = model_from_json(json_string)
答案 1 :(得分:8)
要加载权重,您需要先拥有模型。必须是:
existingModel.save_weights('weightsfile.h5')
existingModel.load_weights('weightsfile.h5')
如果你想保存并加载整个模型(通常这不起作用,我不知道为什么):
model.save_model('filename')
model = load_model('filename')
答案 2 :(得分:1)
由于这个问题已经很老了,但是仍然出现在Google搜索中,我认为最好指出一种新的(推荐的)保存Keras模型的方法。 建议不要使用以前显示的较早的h5格式保存它们,现在建议使用SavedModel格式,它实际上是一个包含模型配置和权重的字典。
更多信息可以在这里找到:https://www.tensorflow.org/guide/keras/save_and_serialize
要保存和加载的代码段可以在下面找到:
model.fit(test_input, test_target)
# Calling save('my_model') creates a SavedModel folder 'my_model'.
model.save('my_model')
# It can be used to reconstruct the model identically.
reconstructed_model = keras.models.load_model('my_model')
此示例输出:
答案 3 :(得分:1)
从头开始加载模型需要您从头开始构建模型,
因此您可以先尝试使用 model.to_json()
model_architecture = model.to_json()
保存模型权重使用
model.save_weights('model_weights.h5')
为了加载您需要使用保存的 json 文件重建模型的权重 首先。
from tensorflow.keras.models import model_from_json
model = model_from_json(model_architecture)
然后使用
加载权重model.load_weights('model_weights.h5')
您现在可以编译和测试模型,无需重新训练 例如
model.compile(loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=keras.optimizers.Adam(lr=0.001), metrics=["accuracy"])
model.evaluate(x_test, y_test, batch_size=32, verbose=2)