python - 在 Keras 中加载保存的模型(双向 LSTM)
问题描述
我在 Keras 中成功训练并保存了一个双向 LSTM 模型:
model = Sequential()
model.add(Bidirectional(LSTM(N_HIDDEN_NEURONS,
return_sequences=True,
activation="tanh",
input_shape=(SEGMENT_TIME_SIZE, N_FEATURES))))
model.add(Bidirectional(LSTM(N_HIDDEN_NEURONS)))
model.add(Dropout(0.5))
model.add(Dense(N_CLASSES, activation='sigmoid'))
model.compile('adam', 'binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train,
batch_size=BATCH_SIZE,
epochs=N_EPOCHS,
validation_data=[X_test, y_test])
model.save('model_keras/model.h5')
但是,当我想加载它时:
model = load_model('model_keras/model.h5')
我收到一个错误:
ValueError:您正在尝试将包含 3 层的权重文件加载到具有 0 层的模型中。
我还尝试了不同的方法,例如分别保存和加载模型架构和权重,但它们都不适合我。此外,以前,当我使用普通(单向)LSTM 时,加载模型效果很好。
解决方案
正如@mpariente和@today所提到的,这input_shape
是双向的参数,而不是LSTM,请参阅Keras 文档。我的解决方案:
# Model
model = Sequential()
model.add(Bidirectional(LSTM(N_HIDDEN_NEURONS,
return_sequences=True,
activation="tanh"),
input_shape=(SEGMENT_TIME_SIZE, N_FEATURES)))
model.add(Bidirectional(LSTM(N_HIDDEN_NEURONS)))
model.add(Dropout(0.5))
model.add(Dense(N_CLASSES, activation='sigmoid'))
model.compile('adam', 'binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train,
batch_size=BATCH_SIZE,
epochs=N_EPOCHS,
validation_data=[X_test, y_test])
model.save('model_keras/model.h5')
然后,要加载,只需执行以下操作:
model = load_model('model_keras/model.h5')
推荐阅读
- jsf - 不能将 EL 表达式放在 ui:repeat 内的 id 中
- java - 基于自定义逻辑在java中拆分字符串
- arrays - 使用 Vlookup 提取数据并使用 Arrayformula 检查值
- android - 为什么当 URL 返回未找到时 Android MediaPlayer 卡在 prepare() 中?
- spring-boot - 为什么我们会看到这个 Axon CommandDispatchException 和 Spring Web AsyncRequestTimeoutException?
- swift - 占用太多空间的项目的 Swift ui 小部件列表
- google-cloud-platform - 构建容器映像时出现 GCP 错误
- android - Xamarin.Forms 帮助优化加载时间
- c++ - CLION 不再找到 math.h
- .net - 我如何在 F# 中使用 Log4Net?