Загрузка сохраненной модели (двунаправленная LSTM) в Керас

1

Я обучил и сохранил двунаправленную модель 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, загрузка модели работала нормально.

  • 0
    Вы уверены, что ваша модель построена без ошибок? input_shape=(SEGMENT_TIME_SIZE, N_FEATURES) должен быть аргументом Bidirectional слоя, а не LSTM . Какая у тебя версия Keras?
  • 0
    @today сегодня я уверен, что это аргумент слоя LSTM
Показать ещё 12 комментариев
Теги:
machine-learning
keras
lstm
neural-network

1 ответ

0
Лучший ответ

Как упоминалось @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')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню