Я обучил и сохранил двунаправленную модель LSTM в Keras успешно:
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
является аргументом 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')
input_shape=(SEGMENT_TIME_SIZE, N_FEATURES)
должен быть аргументомBidirectional
слоя, а неLSTM
. Какая у тебя версия Keras?