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

时间:2018-07-08 22:06:43

标签: python machine-learning neural-network 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时,加载模型可以很好地工作。

1 个答案:

答案 0 :(得分:0)

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

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

model = load_model('model_keras/model.h5')