Como implementar um LSTM bidirecional profunda com Keras?

votos
8

Eu estou tentando implementar um reconhecedor de voz LSTM base. Até agora eu poderia configurar LSTM bidirecional (eu acho que ele está trabalhando como um LSTM bidirecional), seguindo o exemplo da camada de mesclagem. Agora eu quero experimentá-lo com outra camada LSTM bidirecional, que torná-lo um LSTM bidirecional profundo. Mas eu sou incapaz de descobrir como conectar a saída dos mescladas anteriormente duas camadas em um segundo conjunto de camadas LSTM. Eu não sei se é possível com Keras. Espero que alguém possa me ajudar com isso.

Código para a minha única camada LSTM bidirecional é a seguinte

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)

Dimensões da minha valores xey são os seguintes.

(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))
Publicado 03/02/2016 em 03:54
fonte usuário
Em outras línguas...                            


4 respostas

votos
14

Bem, eu tenho a resposta para a questão postou sobre as questões Keras. Espero que isso seria útil para qualquer um que olhar para este tipo de abordagem. Como implementar -LSTM bidirecional profunda

Respondeu 03/02/2016 em 12:54
fonte usuário

votos
2

Você pode usar keras.layers.wrappers.Bidirectional. Manual oficial pode ser referenciado aqui, https://keras.io/layers/wrappers/#bidirectional

Respondeu 05/05/2017 em 01:13
fonte usuário

votos
0

Agora projetar BiLSTM é mais fácil. Uma nova classe Bidirectionalé adicionado como por doc oficial aqui: https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional

Para o resultado de treinamento e de código completo

Respondeu 07/12/2018 em 04:53
fonte usuário

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

exemplo Keras

Respondeu 26/03/2019 em 11:55
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more