问题描述
我正在尝试 PlaidML
,它需要 keras==2.2.4
。我在加载保存的模型格式时遇到了困难。
OSError: Unable to open file (unable to open file: name = '<my model path here>',errno = 13,error message = 'Permission denied',flags = 0,o_flags = 0)
我确定模型路径存在,并且其中的文件是可读的。
我认为 Keras v2.2.4 无法加载保存的模型格式。
这是我的keras\engine\saving.py
:
def load_model(filepath,custom_objects=None,compile=True):
"""Loads a model saved via `save_model`.
# Arguments
filepath: one of the following:
- string,path to the saved model,or
- h5py.File or h5py.Group object from which to load the model
custom_objects: Optional dictionary mapping names
(strings) to custom classes or functions to be
considered during deserialization.
compile: Boolean,whether to compile the model
after loading.
# Returns
A Keras model instance. If an optimizer was found
as part of the saved model,the model is already
compiled. Otherwise,the model is uncompiled and
a warning will be displayed. When `compile` is set
to False,the compilation is omitted without any
warning.
# Raises
ImportError: if h5py is not available.
ValueError: In case of an invalid savefile.
"""
if h5py is None:
raise ImportError('`load_model` requires h5py.')
model = None
opened_new_file = not isinstance(filepath,h5py.Group)
f = h5dict(filepath,'r')
try:
model = _deserialize_model(f,custom_objects,compile)
finally:
if opened_new_file:
f.close()
return model
它似乎只是将路径加载为 HDF5 文件?
我还尝试将保存的模型转换为 .h5 文件。
然后在keras v2.2.4加载,还是不行:
Traceback (most recent call last):
File "test_plaidml.py",line 95,in <module>
model = keras.models.load_model(model_path)
File "keras\engine\saving.py",line 419,in load_model
model = _deserialize_model(f,compile)
File "keras\engine\saving.py",line 224,in _deserialize_model
model_config = json.loads(model_config.decode('utf-8'))
AttributeError: 'str' object has no attribute 'decode'
在没有 v2.2.4 文档的情况下,有什么办法可以找出问题所在?
(我在网上找不到)
谢谢。
更新
我想我知道问题是什么,但我现在不知道如何解决。
我会努力寻找解决方案。
- 因此此版本的 Keras 无法加载已保存的模型(TF2 功能)。
似乎 v2.3.0 开始部分支持 TF2。 - 不兼容的 h5py 版本似乎是无法加载 .h5 文件的原因。
使用 Python 3.8 通过 installing h5py==2.10.0 解决。 - 但是,我仍然得到了 TypeError: init() got an unexpected keyword argument 'ragged',可能是因为我使用的是 tf.keras,现在切换到 keras。
我想知道是否可以在 PlaidML/旧 Keras 上运行 tf2 模型。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)