我目前正在使用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 回答
我花了6个小时寻找解决方案......给我应用训练有素的模型 . 最后我尝试了VGG16作为模型并使用h5砝码我已经训练了我自己和伟大的!
看来这个问题与第一层的input_shape参数有关 . 我有一个包装层(双向)没有input_shape参数设置的问题 . 在代码中:
不能用于加载我的旧模型,因为input_shape仅为LSTM层而不是外层定义 . 代替
因为包装器Birectional层现在有一个input_shape参数 . 也许您应该检查是否设置了VGG net input_shape参数,或者您应该使用正确的input_shape参数向模型添加单个input_layer .