【问题标题】:How to find the number of layers from the saved h5 file of pre-trained model?如何从保存的预训练模型的h5文件中找到层数?
【发布时间】:2019-06-27 22:22:55
【问题描述】:

我有以 h5 格式保存的 VGG-16 权重。我想查看网络中的层数。我该怎么做?

我尝试使用:

file = h5py.File(vgg16.h5)

之后,我检查了file.attrs,但之后我不知道使用哪个命令来查找网络中的层数。

【问题讨论】:

  • 虽然我们可以描述文件的一般布局(组、数据集、属性),但我们无法描述这个特定的文件。这完全取决于它是如何编写的。
  • 你没有一些文件吗?
  • 嗨 hpaulj,是的,只是想知道在这个属性中我可以看到层数或任何选项吗?
  • 当您说“层数”时,您指的是数据集的数量,还是 1 个数据集的大小和形状?要获取数据集信息,请使用 .shape.dtype(如 numpy 命名法)。如果您想要组中的数据集数量,请在组上使用 len() 函数。查看 h5 文件的数据结构和内容的简单方法是 HDF Group 中的 HDFView

标签: python numpy h5py pre-trained-model transfer-learning


【解决方案1】:

没有您的数据或代码,很难提供更多详细信息。 为了演示访问 h5 数据的 h5py 方法,这里有一个简单的示例,它创建一个包含 1 个组和 3 个数据集的 h5 文件。创建组和数据集后,有一个循环打印数据集名称、形状和 dtype。

import h5py, numpy as np
h5f=h5py.File('SO_54511719.h5','w')

ds_data = np.random.random(100).reshape(10,10)
group1 = h5f.create_group('group1')
group1.create_dataset('ds_1', data=ds_data)
group1.create_dataset('ds_2', data=ds_data)
group1.create_dataset('ds_3', data=ds_data)

print ('number of datasets in group:', len(group1))
for (dsname, dsvalue) in group1.items() :
    print ('for',dsname,':')
    print ('shape:',dsvalue.shape)
    print ('dtype:',dsvalue.dtype)

h5f.close()

输出如下所示:

number of datasets in group: 3
for ds_1 :
shape: (10, 10)
dtype: float64
for ds_2 :
shape: (10, 10)
dtype: float64
for ds_3 :
shape: (10, 10)
dtype: float64

【讨论】:

    【解决方案2】:

    如果您在提供的 spyder 中键入此代码,则您已经安装了 Keras 库。您将获得 h5.file 中的所有层

    from keras.models import load_model
    
    classifier=load_model('my_model.h5')
    
    classifier.summary()
    

    【讨论】:

      【解决方案3】:

      如果您只有权重而没有模型结构,您可以使用 keys() 方法获取该权重文件中的所有层名称。

      例如:我有一个体重文件:saved-weight.h5

      如果我想知道这个权重文件中存在哪些层,您可以执行以下操作:

      import h5py
      file = h5py.File('saved-weight.h5')
      
      layer_names = file.keys()
      
      # output 
      layer_names =  <KeysViewHDF5 ['add', 'bn_3', 'bn_5', 'bn_7', 
          'concatenate', 'conv_1', 'conv_2', 'conv_3',
          'dropout', 'fc_8', 'fc_9', 
          'gru_10', 'gru_10_back', 'gru_11', 'gru_11_back', 
          'input_1', 'input_3', 'input_4', 'labels', 
          'lambda', 'lambda_1', 'lambda_2', 'lambda_3', 
          'maxpool_3', 'maxpool_5', 'model', 'permute', 'reshape']>
      

      这些是保存的权重文件中存在的层

      【讨论】:

      • 我认为这是重量唯一保存模型的正确答案
      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多