【发布时间】:2020-12-02 04:48:44
【问题描述】:
我有一个 .h5 文件,其中仅包含已使用 Mask-RCNN 和 Keras 框架进行目标检测训练的模型的权重。我想用 Python 中的 Tensorflow + Keras 加载这个模型,并在自定义图像上运行对象检测。
我正在使用 Python 3.8.5,我尝试使用 keras.models.load_model() 函数加载此模型,但尝试这样做时收到错误:
ValueError: 在配置文件中找不到模型
我理解这意味着 .h5 文件只保存了模型权重,并且为了使用这些权重,我必须将它们加载到具有相同架构的模型中。
我已使用 h5py python 模块查看 .h5 文件中的组以试图了解架构,但我只看到如下键:(还有很多很多类似的,但那些是我看到的键的一般概述)
“activation_1”、“add_32”、“bn2a_branch1”、“res5c_out”等
这些组有时具有数据集成员,访问时会提供类似于以下内容的信息:
<HDF5 group "/bn4v_branch2a/bn4v_branch2a" (4 members)\>
<HDF5 dataset "beta:0": shape (256,), type "<f4"\>
<HDF5 dataset "gamma:0": shape (256,), type "<f4"\>
<HDF5 dataset "moving_mean:0": shape (256,), type "<f4"\>
<HDF5 dataset "moving_variance:0": shape (256,), type "<f4"\>
我可以假设一些东西,比如“activation_1”可能对应于激活层,但其余的层似乎与我习惯看到的 Dense、LeakyReLU、BatchNormalization 层等无关/在构建模型时使用。
我需要在这里做什么?如何从仅具有模型权重的 .h5 文件中确定 Keras + Mask-RCNN 模型的架构?
谢谢,非常感谢您的帮助!
【问题讨论】:
-
我认为这在一般情况下是不可能的,你最好的办法是找到用于产生权重的架构,代码应该在某个地方
-
h5是一种通用数据格式。h5py将其数据集加载为numpy数组。这些数组和Keras模型之间的任何关系都是由Keras(或每个保存文件的人)强加的。我想它可以保存足够的信息来重新创建模型,但我无法从数据集名称中分辨出来。 (组/数据集也可以有属性)。
标签: python tensorflow keras h5py