我正在尝试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, custom_objects, 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安装 h5py==2.10.0
解决了这个问题。 - 但是,我仍然得到TypeError: init () got an unexpected keyword argument 'ragged',可能是因为我正在使用 tf.keras,并且现在切换到 keras。
我想知道是否可以在 PlaidML / old Keras 上运行 tf2 模型。