python - keras 加载模型错误尝试将包含 17 层的权重文件加载到具有 0 层的模型中
问题描述
我目前正在使用 keras 开发 vgg16 模型。我用我的一些层微调 vgg 模型。拟合我的模型(训练)后,我将模型保存为model.save('name.h5')
. 它可以毫无问题地保存。但是,当我尝试使用load_model
函数重新加载模型时,它会显示错误:
您正在尝试将包含 17 层的权重文件加载到具有 0 层的模型中
以前有人遇到过这个问题吗?我的 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'))
因为包装双向层现在有一个 input_shape 参数。也许您应该检查是否设置了 VGG net input_shape 参数,或者您应该使用正确的input_shape参数将单个input_layer添加到模型中。
推荐阅读
- amazon-web-services - 处理来自 Amazon SQS 死信队列的消息
- r - 仅给出最终样本大小的 R 多阶段抽样
- testing - Golang 测试覆盖与黑盒 _test 覆盖
- python - 将时间戳舍入到最接近的 30 秒
- java - couchbase 插入和查询延迟
- php - 在 000webhost 中找不到 Laravel 路由
- multithreading - 在 ABCL (Armed Bear) LISP 中如何创建后台子进程/后台线程?
- php - php pthreads中的动态任务调度?
- c++ - Visual Studio 控制台调试错误文件
- parsing - 使用解析选择sumologic中的字段时如何更改字段的格式