在keras中保存并加载权重

时间:2017-11-13 14:15:27

标签: python keras

我试图从我训练过的模型中保存并加载权重。

用于保存模型的代码是。

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.

有关我可能做错的任何建议? 提前谢谢。

4 个答案:

答案 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')

此示例输出:

enter image description here

答案 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)