【发布时间】:2020-11-14 00:41:07
【问题描述】:
我在 colab 中制作了一个 CNN,并在每个 epoch 保存了模型。我导出了 h5 文件,现在正尝试在一些测试图像上运行模型。这是主要错误:
ValueError: Unknown layer: Functional
这是我用来运行模型并在每个时期保存的代码:
epochs = 50
callbacks = [
tf.keras.callbacks.TensorBoard(log_dir='./logs'),
keras.callbacks.ModelCheckpoint("save_at_{epoch}.h5"),
]
model.compile(
optimizer=keras.optimizers.Adam(1e-3),
loss="binary_crossentropy",
metrics=["accuracy"],
)
model.fit(
train_ds, epochs=epochs, callbacks=callbacks, validation_data=val_ds,
)
模型运行后,我只是在本地从 colab 侧边栏下载了 h5 文件。我从本地磁盘重新上传了文件,这是我尝试加载模型的方式:
# load and evaluate a saved model
from tensorflow.keras.models import load_model
# load model#
loaded_model = load_model('save_at_47.h5')
loaded_model.layers[0].input_shape
这是完整的回溯:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-6af7396280fa> in <module>()
3
4 # load model#
----> 5 loaded_model = load_model('save_at_47.h5')
6 loaded_model.layers[0].input_shape
5 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/save.py in load_model(filepath, custom_objects, compile)
182 if (h5py is not None and (
183 isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):
--> 184 return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)
185
186 if sys.version_info >= (3, 4) and isinstance(filepath, pathlib.Path):
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/hdf5_format.py in load_model_from_hdf5(filepath, custom_objects, compile)
176 model_config = json.loads(model_config.decode('utf-8'))
177 model = model_config_lib.model_from_config(model_config,
--> 178 custom_objects=custom_objects)
179
180 # set weights
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/model_config.py in model_from_config(config, custom_objects)
53 '`Sequential.from_config(config)`?')
54 from tensorflow.python.keras.layers import deserialize # pylint: disable=g-import-not-at-top
---> 55 return deserialize(config, custom_objects=custom_objects)
56
57
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
107 module_objects=globs,
108 custom_objects=custom_objects,
--> 109 printable_module_name='layer')
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
360 config = identifier
361 (cls, cls_config) = class_and_config_for_serialized_keras_object(
--> 362 config, module_objects, custom_objects, printable_module_name)
363
364 if hasattr(cls, 'from_config'):
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
319 cls = get_registered_object(class_name, custom_objects, module_objects)
320 if cls is None:
--> 321 raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
322
323 cls_config = config['config']
ValueError: Unknown layer: Functional
似乎有几个类似的questions here和here。更改导入方法还没有帮助,尝试制作一些 kind of custom 对象也没有奏效。
【问题讨论】:
-
能否提供您用于保存模型的代码?
-
当然,我更新了问题以显示我如何将模型保存到磁盘。谢谢
-
为什么不自己从头开始重建模型并从
h5文件中加载权重(model.load_weights('save_at_47.h5'))? -
在你的错误中这个层被称为功能是什么?它是您制作的自定义图层吗?
-
简单易行。只需运行包含模型定义和编译的单元格,然后将权重加载到我在上面告诉您的这个裸露的空模型中。
标签: python tensorflow keras