首页 文章

keras加载模型错误尝试将包含17个图层的权重文件加载到具有0个图层的模型中

提问于
浏览
3

我目前正在使用keras的vgg16模型 . 我用我的一些图层微调vgg模型 . 在拟合我的模型(训练)后,我用 model.save('name.h5') 保存我的模型 . 它可以毫无问题地保存 . 但是,当我尝试使用 load_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')

实际上我不会立即删除模型然后 load_model ,只是为了显示我的问题 .

2 回答

  • 0

    我花了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")
    
  • 0

    看来这个问题与第一层的input_shape参数有关 . 我有一个包装层(双向)没有input_shape参数设置的问题 . 在代码中:

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

    不能用于加载我的旧模型,因为input_shape仅为LSTM层而不是外层定义 . 代替

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

    因为包装器Birectional层现在有一个input_shape参数 . 也许您应该检查是否设置了VGG net input_shape参数,或者您应该使用正确的input_shape参数向模型添加单个input_layer .

相关问题