Python 有没有一种方法可以从.h5文件中确定模型体系结构?

Python 有没有一种方法可以从.h5文件中确定模型体系结构?,python,tensorflow,keras,h5py,Python,Tensorflow,Keras,H5py,我有一个.h5文件,其中只包含使用Mask RCNN和Keras框架进行对象检测训练的模型的权重。我想用Python中的Tensorflow+Keras加载这个模型,并在自定义图像上运行对象检测 我正在使用Python 3.8.5,我尝试使用keras.models.load_model()函数加载此模型,但尝试加载时收到错误: ValueError:在配置文件中找不到模型 我理解这意味着.h5文件只保存了模型权重,为了使用这些权重,我必须将它们加载到具有相同体系结构的模型中 为了理解体系结构,

我有一个.h5文件,其中只包含使用Mask RCNN和Keras框架进行对象检测训练的模型的权重。我想用Python中的Tensorflow+Keras加载这个模型,并在自定义图像上运行对象检测

我正在使用Python 3.8.5,我尝试使用
keras.models.load_model()
函数加载此模型,但尝试加载时收到错误:

ValueError:在配置文件中找不到模型

我理解这意味着.h5文件只保存了模型权重,为了使用这些权重,我必须将它们加载到具有相同体系结构的模型中

为了理解体系结构,我使用了h5py python模块来查看.h5文件中的组,但我只看到了下面这样的键:(有很多很多类似的键,但这些是我看到的键的概述)

“激活1”、“添加32”、“bn2a\U分支1”、“res5c\U 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”可能对应于激活层,但其余的层似乎与我在构建模型时经常看到/使用的致密层、泄漏层、BatchNormalization层等不相关

我需要在这里做什么?如何从仅具有模型权重的.h5文件确定Keras+Mask RCNN模型的体系结构


谢谢,非常感谢您的帮助

尝试将模型加载到另一个变量中,然后调用model.summary()函数

这将显示模型的层,如下所示:

您可能能够从所获得的输出中收集一些信息。例如

<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"\>

是一个批量归一化层。我通过编写手动转换代码将pytorch转换为tensorflow就知道了这一点


也许您可以构建自己的测试网络,提取权重并读取结构,查看结构与您知道的层的外观,然后与未知模型结构进行比较?

您可以在根组属性的“model\u config”中找到它。只需检查:

f = h5py.File(your_model_name, 'r')
f.attrs.get('model_config')

在那里,您可以找到所有具有名称、形状、激活功能等的图层类。

我认为在一般情况下,这是不可能的,最好的办法是找到用于生成权重的体系结构,代码应该在某个地方
h5
是一种通用数据格式
h5py
将其数据集加载为
numpy
数组。这些数组和
Keras
模型之间的任何关系都是由
Keras
强加的(或者每个保存文件的人)。我想它可以保存足够的信息来重新创建模型,但我无法从数据集名称中分辨出来。(一个组/数据集也可以有属性)。正如作者所解释的,load_模型不起作用,因为原始h5文件只保存了权重
f = h5py.File(your_model_name, 'r')
f.attrs.get('model_config')