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

标签 python model keras deep-learning

我目前正在使用 keras 开发 vgg16 模型。 我用我的一些层微调 vgg 模型。 拟合我的模型(训练)后,我使用 model.save('name.h5') 保存我的模型。 它可以毫无问题地保存。 但是,当我尝试使用 load_model 函数重新加载模型时,它显示错误:

You are trying to load a weight file containing 17 layers into a model with 0 layers

有没有人遇到过这个问题? 我的 keras 版本是 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, 只是为了展示我的问题。

最佳答案

这个问题好像和第一层的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 网络 input_shape 参数,或者您应该使用正确的 input_shape 参数向您的模型添加一个 input_layer

关于python - keras 加载模型错误尝试将包含 17 层的权重文件加载到具有 0 层的模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913225/

相关文章:

python - 从网页获取国际字符?

php - 拉拉维尔 5.2 : Order Models by Pivot table field

keras - Keras 中的自定义损失函数结合了多个输出

python - 如何在 Keras 中返回验证丢失的历史记录

python - 取消设置 Conda 中的代理

python - 数据库和 Web 显示界面中错误处理的最佳策略

android - 我在android中的模型需要为单例吗?

python - 如何在keras中的某个时期后执行一些python代码

Python 意外性能 : Brute Force vs Dictionaries (Collatz Sequence)

ruby-on-rails - 查找后的 Mongoid 文档持久性