在 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.

对我可能做错的事有什么建议吗? 先谢谢你。

159862 次浏览

为了加载 举重,你首先需要一个模型,它必须是:

existingModel.save_weights('weightsfile.h5')
existingModel.load_weights('weightsfile.h5')

如果您想要保存和加载整个模型(包括模型的配置、权重和优化器状态,以便进一步训练) :

model.save_model('filename')
model = load_model('filename')

这里有一个 YouTube 视频,它准确地解释了你想要做什么: 保存并加载一个 Kera 模型

Kera 提供了三种不同的保存方法。这些都在上面的视频链接中描述(带有例子) ,以及下面的视频链接。

首先,您收到错误消息的原因是您调用 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)

由于这个问题已经很老了,但仍然出现在谷歌搜索,我认为这将是很好的指出更新(和推荐)的方式来保存克拉斯型号。 现在建议使用 SavedModel 格式,而不是像前面展示的那样使用较老的 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

从头加载模型需要您从头构建模型, 因此,您可以尝试首先使用 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)