tensorflow 有没有一种方法可以从.h5文件中确定模型架构?

velaa5lx  于 2023-08-06  发布在  其他
关注(0)|答案(4)|浏览(180)

我有一个.h5文件,其中仅包含已使用Mask-RCNN和Keras框架进行训练以执行对象检测的模型的权重。我想用Python中的Tensorflow + Keras加载此模型,并在自定义图像上运行对象检测。
我使用的是Python 3.8.5,我尝试过使用keras.models.load_model()函数加载这个模型,但是当我尝试这样做的时候,我收到了错误:
ValueError:在配置文件中未找到模型
我知道这意味着.h5文件只保存了模型权重,为了使用这些权重,我必须将它们加载到具有相同体系结构的模型中。
我已经使用h5 py python模块查看了.h5文件中的组,试图了解其体系结构,但我只看到了如下所示的键:(还有很多很多像这样的,但那些都是我看到的键的总体概述)
“激活_1”、“添加_32”、“bn2a_branch1”、“资源5c_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模型的架构?
谢谢,任何帮助都是非常感激的!

9fkzdhlc

9fkzdhlc1#

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

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

字符串
在那里,你会发现所有的层类的名称,形状,激活功能等。

8ulbf1ek

8ulbf1ek2#

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

model_2 = load_model('old_model.h5')
model_2.summary()

字符串
这应该显示模型的层,如下所示:Summary of model

5t7ly7z5

5t7ly7z53#

您也许能够从所得到的输出中收集一些信息。例如:

<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的手动转换代码来了解这一点的。
也许你可以建立一个自己的测试网络,提取权重并读取结构,看看你知道的层的结构是什么样的,然后与你未知的模型结构进行比较?

ergxz8rk

ergxz8rk4#

有一个网站叫做netron,你可以上传你的.h5文件,并获得你的模型的良好视图。
https://netron.app/

相关问题