加载Keras中保存的模型(双向LSTM)

2024-04-20 14:54:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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')

但是,当我想加载它时:

^{pr2}$

我得到一个错误:

ValueError: You are trying to load a weight file containing 3 layers into a model with 0 layers.

我也尝试了不同的方法,比如分别保存和加载模型架构和权重,但没有一种方法对我有效。另外,以前,当我使用普通(单向)LSTMs时,加载模型工作得很好。在


Tags: 方法模型testaddsizemodellayerstrain
1条回答
网友
1楼 · 发布于 2024-04-20 14:54:11

正如@mpariente@today所提到的,input_shape是双向的参数,而不是LSTM,请参见Keras documentation。我的解决方案:

# 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')

然后,要加载,只需执行以下操作:

^{pr2}$

相关问题 更多 >