在keras中保存并加载权重

Rya*_*an 36 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')
Run Code Online (Sandbox Code Playgroud)

如果这是一种不正确的方式,或者是否有更好的方法,请告诉我.

但当我尝试加载它们时,使用它,

from keras.models import load_model
model = load_model('myModel.h5')
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:


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.
Run Code Online (Sandbox Code Playgroud)

关于我可能做错什么的任何建议?先感谢您.

bla*_*tor 65

以下是YouTube视频,可准确说明您要执行的操作:保存并加载Keras模型

Keras提供三种不同的保存方法.这些在上面的视频链接(带有示例)以及下面进行了描述.

首先,您收到错误的原因是您的呼叫load_model不正确.

要保存和加载模型的权重,您首先要使用

model.save_weights('my_model_weights.h5')
Run Code Online (Sandbox Code Playgroud)

如您所示,保存权重.要加载权重,首先需要构建模型,然后调用load_weights模型,如

model.load_weights('my_model_weights.h5')
Run Code Online (Sandbox Code Playgroud)

另一种节约技术是model.save(filepath).此save功能可以保存:

  • 模型的体系结构,允许重新创建模型.
  • 模型的权重.
  • 训练配置(丢失,优化器).
  • 优化器的状态,允许您从中断的位置恢复训练.

要加载此已保存的模型,您将使用以下内容:

from keras.models import load_model
new_model = load_model(filepath)'
Run Code Online (Sandbox Code Playgroud)

最后,model.to_json()仅保存模型的体系结构.要加载架构,您可以使用

from keras.models import model_from_json
model = model_from_json(json_string)
Run Code Online (Sandbox Code Playgroud)

  • 如果我将权重保存在python 3.6上,是否可以在python 2.7上加载它们? (2认同)
  • @Rtucan我认为是。你可以试试。 (2认同)
  • 是否可以从 model.save() 而不是 model.save_weights 加载已保存模型的权重?如果是的话该怎么办呢? (2认同)

Dan*_*ler 9

要加载重量,您需要先拥有模型.肯定是:

existingModel.save_weights('weightsfile.h5')
existingModel.load_weights('weightsfile.h5')     
Run Code Online (Sandbox Code Playgroud)

如果你想保存并加载整个模型(通常这不起作用,我不知道为什么):

model.save_model('filename')
model = load_model('filename')
Run Code Online (Sandbox Code Playgroud)


Sam*_*tte 7

由于这个问题已经很老了,但仍然出现在谷歌搜索中,我认为最好指出保存 Keras 模型的更新(和推荐)方法。现在建议使用 SavedModel 格式,而不是像之前那样使用旧的 h5 格式保存它们,它实际上是一个包含模型配置和权重的字典。

更多信息可以在这里找到: 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')
Run Code Online (Sandbox Code Playgroud)

其输出示例:

在此输入图像描述