Вопрос:

Как реализовать глубокий двунаправленный LSTM с Keras?

deep-learning keras lstm

19046 просмотра

4 ответа

578 Репутация автора

Я пытаюсь реализовать распознаватель речи на основе LSTM. До сих пор я мог настроить двунаправленный LSTM (я думаю, что он работает как двунаправленный LSTM), следуя примеру в слое Merge. Теперь я хочу попробовать это с другим двунаправленным слоем LSTM, что делает его глубоким двунаправленным LSTM. Но я не могу понять, как соединить выходные данные ранее слитых двух слоев со вторым набором слоев LSTM. Я не знаю, возможно ли это с Керасом. Надеюсь, кто-нибудь может мне помочь с этим.

Код для моего однослойного двунаправленного LSTM выглядит следующим образом

left = Sequential()
left.add(LSTM(output_dim=hidden_units, init='uniform', inner_init='uniform',
               forget_bias_init='one', return_sequences=True, activation='tanh',
               inner_activation='sigmoid', input_shape=(99, 13)))
right = Sequential()
right.add(LSTM(output_dim=hidden_units, init='uniform', inner_init='uniform',
               forget_bias_init='one', return_sequences=True, activation='tanh',
               inner_activation='sigmoid', input_shape=(99, 13), go_backwards=True))

model = Sequential()
model.add(Merge([left, right], mode='sum'))

model.add(TimeDistributedDense(nb_classes))
model.add(Activation('softmax'))

sgd = SGD(lr=0.1, decay=1e-5, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)
print("Train...")
model.fit([X_train, X_train], Y_train, batch_size=1, nb_epoch=nb_epoches, validation_data=([X_test, X_test], Y_test), verbose=1, show_accuracy=True)

Размеры моих значений x и y следующие.

(100, 'train sequences')
(20, 'test sequences')
('X_train shape:', (100, 99, 13))
('X_test shape:', (20, 99, 13))
('y_train shape:', (100, 99, 11))
('y_test shape:', (20, 99, 11))
Автор: udani Источник Размещён: 03.02.2016 05:54

Ответы (4)


16 плюса

578 Репутация автора

Решение

Ну, я получил ответ на вопрос, опубликованный на вопросы Keras. Надеюсь, что это будет полезно для всех, кто ищет такой подход. Как реализовать глубокую двунаправленную -LSTM

Автор: udani Размещён: 03.02.2016 02:54

2 плюса

1785 Репутация автора

Вы можете использовать keras.layers.wrappers.Bidirectional. Официальное руководство можно найти здесь, https://keras.io/layers/wrappers/#bidirectional

Автор: Tom Размещён: 05.05.2017 02:13

1 плюс

1180 Репутация автора

Теперь проектирование BiLSTM стало проще. Новый класс Bidirectionalдобавляется в соответствии с официальным документом здесь: https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional

Для результата обучения и полного кода

Автор: Partha Sen Размещён: 07.12.2018 06:53

0 плюса

423 Репутация автора

model.add(Bidirectional(LSTM(64)))

Керас пример

Автор: rosefun Размещён: 26.03.2019 01:55
Вопросы из категории :
32x32