我已从此链接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.
有人可以帮助我了解此只读模式吗?如何加载此模型?
答案 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\architecture
和load_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
个文件。