Deep learning 无法加载keras 2的VGG16权重文件

Deep learning 无法加载keras 2的VGG16权重文件,deep-learning,keras,h5py,Deep Learning,Keras,H5py,我正在使用keras2进行vgg16微调。在实际细化顶层权重之前,我需要加载VGG16模型权重,以避免长时间的训练 我从下载了VGG16权重。我尝试过的权重包括“vgg16权重大小排序大小排序大小排序大小内核.h5”和“vgg16权重大小排序大小排序大小内核.h5”,但都失败了,出现以下错误: File "h5py/h5a.pyx", line 77, in h5py.h5a.open (/tmp/pip-nCYoKW-build/h5py/h5a.c:2337) KeyError: "C

我正在使用keras2进行vgg16微调。在实际细化顶层权重之前,我需要加载VGG16模型权重,以避免长时间的训练

我从下载了VGG16权重。我尝试过的权重包括“vgg16权重大小排序大小排序大小排序大小内核.h5”和“vgg16权重大小排序大小排序大小内核.h5”,但都失败了,出现以下错误:

   File "h5py/h5a.pyx", line 77, in h5py.h5a.open (/tmp/pip-nCYoKW-build/h5py/h5a.c:2337)
KeyError: "Can't open attribute (Can't locate attribute: 'nb_layers')"
用于加载权重文件的代码如下所示:

# loading the weights of the pre-trained VGG16:
assert os.path.exists(weights_path), 'Model weights not found (see "weights_path" variable in script).'
f = h5py.File(weights_path, 'r')
for k in range(f.attrs['nb_layers']):
    if k >= len(model.layers):
        break
    g = f['layer_{}'.format(k)]
weights = [g['param_{}'.format(p)] for p in range(g.attrs['nb_params'])]
model.layers[k].set_weights(weights)
f.close()

事实上,我在StackOverflow中发现了一个,但它并没有解决我的问题。那么,您是否遇到了同样的问题,或者您可以帮助我解决这个问题?

为什么不使用应用程序提供的版本。谢谢。我现在可以使用这个版本来处理它了。但还有一个问题。顶层是我自己创建的,我想从文件中加载权重,而不是使用初始随机权重创建它们。他使用Sequential()创建顶层,使用.load_weights()方法加载权重文件,然后使用.add()方法连接顶层和VGG-16的层。但在Keras2中这是不可能的,因为VGG16属于“Model”类型,并且没有.add()方法。那么,在这种情况下如何加载权重文件呢?同样,应用程序也可以加载权重文件。只需将
weight
参数设置为
imagenet
,模型将预加载这些权重。我的意思是加载顶层的权重。VGG16的重量很容易使用您提到的方式加载。但我需要修正VGG16的权重,并学习顶层的权重。但我不想从零开始学习,而是从一个预训练的权重文件中学习。我终于找到了一个解决方案。Model()类有一个方法。load_weights()。然后使用Model()连接两个模型:
input\u tensor=input(shape=(150150,3))base\u Model=applications.VGG16(weights='imagenet',include\u top=False,input\u tensor=input\u tensor)top\u Model=Sequential()top\u Model.add(展平(input\u shape=base\u Model.output\u shape[1:])top\u Model.add(稠密(256,activation='relu'))top\u Model.add(0.5))top_model.add(稠密(1,activation='sigmoid'))top_model.load_weights(top_model_weights_path)model=model(输入=base_model.input,输出=top_model(base_model.output))