Python keras加载模型尝试将包含17层的权重文件加载到包含0层的模型时出错

Python keras加载模型尝试将包含17层的权重文件加载到包含0层的模型时出错,python,model,keras,deep-learning,Python,Model,Keras,Deep Learning,我目前正在与keras一起开发vgg16模型。 我用我的一些图层微调vgg模型。 安装模型(培训)后,我使用model.save('name.h5')保存模型。 它可以毫无问题地保存。 但是,当我尝试使用load\u model功能重新加载模型时,会显示错误: 您正在尝试将包含17个图层的权重文件加载到模型中 有0层 以前有人遇到过这个问题吗? 我的keras verion是2.2 这是我的部分代码 from keras.models import load_model vgg_model =

我目前正在与keras一起开发vgg16模型。 我用我的一些图层微调vgg模型。 安装模型(培训)后,我使用
model.save('name.h5')
保存模型。 它可以毫无问题地保存。 但是,当我尝试使用
load\u model
功能重新加载模型时,会显示错误:

您正在尝试将包含17个图层的权重文件加载到模型中 有0层

以前有人遇到过这个问题吗? 我的keras verion是2.2

这是我的部分代码

from keras.models import load_model
vgg_model = VGG16(weights='imagenet',include_top=False,input_shape=(224,224,3))    
global model_2
model_2 = Sequential()
for layer in vgg_model.layers:
    model_2.add(layer)
for layer in model_2.layers:
    layer.trainable= False
model_2.add(Flatten())
model_2.add(Dense(128, activation='relu'))
model_2.add(Dropout(0.5))
model_2.add(Dense(2, activation='softmax'))
model_2.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_2.fit(x=X_train,y=y_train,batch_size=32,epochs=30,verbose=2)
model_2.save('name.h5')
del model_2
model_2 = load_model('name.h5')
实际上,我没有删除模型,然后立即加载模型,
只是为了显示我的问题。

似乎这个问题与第一层的输入形状参数有关。我有一个包装层(双向)的问题,它没有一个输入形状参数集。代码:

model.add(Bidirectional(LSTM(units=units, input_shape=(None, feature_size)), merge_mode='concat'))
加载旧模型时不起作用,因为只为LSTM层而不是外部层定义了输入形状。反而

model.add(Bidirectional(LSTM(units=units), input_shape=(None, feature_size), merge_mode='concat'))

之所以有效,是因为包装器双方向层现在有一个输入形状参数。也许您应该检查VGG net input\u shape参数是否已设置,或者您应该使用正确的input\u shape参数向模型中添加一个input\u层。

我花了6个小时四处寻找解决方案。。用我受过训练的模型。 最后,我尝试了VGG16作为模型,使用我自己训练的h5重量,非常棒

weights_model='C:/Anaconda/weightsnew2.h5'  # my already trained weights .h5
vgg=applications.vgg16.VGG16()
cnn=Sequential()
for capa in vgg.layers:
   cnn.add(capa)
cnn.layers.pop()
for layer in cnn.layers:
   layer.trainable=False
cnn.add(Dense(2,activation='softmax'))  

cnn.load_weights(weights_model)

def predict(file):
   x = load_img(file, target_size=(longitud, altura)) 
   x = img_to_array(x)                            
   x = np.expand_dims(x, axis=0)
   array = cnn.predict(x)     
   result = array[0]
   respuesta = np.argmax(result) 
   if respuesta == 0:
      print("Gato")
   elif respuesta == 1:
      print("Perro")

如果有人仍对此错误感到疑惑:

我也有同样的问题,花了好几天的时间来找出原因。我在另一个系统上有我的整个代码和数据集的副本。我注意到这与训练有关,因为如果不训练我的模型,保存和加载就没有问题。 我的系统之间唯一的区别是,我在我的主系统上使用了tensorflow gpu,因此tensorflow的基本版本稍微低一点(1.14.0而不是2.2.0)。所以我所要做的就是使用

model.fit_generator()
而不是

model.fit()

在保存之前。它可以工作

我可以在我的机器上运行你的代码而不会出现任何问题(当然,没有配件)。这是一个奇怪的错误…你确定这就是你使用的代码吗?你在Anaconda上使用Keras吗?你能详细说明你的代码是如何解决问题的吗?是的,我曾经遇到过同样的错误“Keras加载模型错误试图将包含17层的权重文件加载到一个0层的模型中”,因为它看起来像是Keras加载模型函数中的一种2bug。但是如果不是加载模型=”文件“您定义模型,然后加载权重。它有效。当您尝试加载模型时,问题就会出现。