keras中的只读模式

时间:2018-11-08 17:00:42

标签: python tensorflow keras deep-learning

我已从此链接human pose estimation keras

克隆了人体姿势估计keras模型。

当我尝试在google colab上加载模型时,出现以下错误

代码

from keras.models import load_model
model = load_model('model.h5')

错误

ValueError                                Traceback (most recent call 

last)
<ipython-input-29-bdcc7d8d338b> in <module>()
      1 from keras.models import load_model
----> 2 model = load_model('model.h5')

/usr/local/lib/python3.6/dist-packages/keras/engine/saving.py in load_model(filepath, custom_objects, compile)
    417     f = h5dict(filepath, 'r')
    418     try:
--> 419         model = _deserialize_model(f, custom_objects, compile)
    420     finally:
    421         if opened_new_file:

/usr/local/lib/python3.6/dist-packages/keras/engine/saving.py in _deserialize_model(f, custom_objects, compile)
    219         return obj
    220 
--> 221     model_config = f['model_config']
    222     if model_config is None:
    223         raise ValueError('No model found in config.')

/usr/local/lib/python3.6/dist-packages/keras/utils/io_utils.py in __getitem__(self, attr)
    300             else:
    301                 if self.read_only:
--> 302                     raise ValueError('Cannot create group in read only mode.')
    303                 val = H5Dict(self.data.create_group(attr))
    304         return val

ValueError: Cannot create group in read only mode.

有人可以帮助我了解此只读模式吗?如何加载此模型?

4 个答案:

答案 0 :(得分:7)

以下是在Google Collab上为您创建的Git gist示例:https://gist.github.com/kolygri/835ccea6b87089fbfd64395c3895c01f

据我了解:

  

您必须设置和定义模型的体系结构,然后使用model.load_weights('alexnet_weights.h5')。

这是一个有用的Github对话链接,希望可以帮助您更好地理解问题: https://github.com/keras-team/keras/issues/6937

答案 1 :(得分:2)

我遇到了类似的问题并以这种方式解决了

存储graph\architecture格式存储JSON和以weights格式存储h5

import json

# lets assume `model` is main model 
model_json = model.to_json()
with open("model_in_json.json", "w") as json_file:
    json.dump(model_json, json_file)

model.save_weights("model_weights.h5")

然后需要load model首先到达模型中的create graph\architectureload_weights

from keras.models import load_model
from keras.models import model_from_json
import json

with open('model_in_json.json','r') as f:
    model_json = json.load(f)

model = model_from_json(model_json)
model.load_weights('model_weights.h5')

答案 2 :(得分:0)

我用callbacks.ModelCheckpoint保存了权重,并且遇到了类似的错误。我发现有一个名为save_weights_only

的参数

如果我设置了save_weights_only=True,那么当我使用load_model()在另一个进程中加载​​模型时,它将引发“无法以只读模式创建组”。错误。

如果设置了save_weights_only=False(这是默认设置),则可以使用load_model()加载模型并使用它进行预测,而无需先编译模型。

答案 3 :(得分:0)

您可以先使用model.save(model_path+'Model.h5'),然后再使用keras.models.load_model(model_path+'Model.h5'),这样一来,您就无需在加载权重之前构建和编译模型,因为model.save.h5个文件。