web-dev-qa-db-fra.com

Comment implémenter un LSTM bidirectionnel profond avec Keras?

J'essaie d'implémenter un système de reconnaissance vocale basé sur LSTM. Jusqu'à présent, je pouvais configurer un LSTM bidirectionnel (je pense que cela fonctionne comme un LSTM bidirectionnel) en suivant l'exemple de la couche de fusion. Maintenant, je veux l'essayer avec une autre couche LSTM bidirectionnelle, ce qui en fait un LSTM bidirectionnel profond. Mais je suis incapable de comprendre comment connecter la sortie des deux couches précédemment fusionnées dans un second ensemble de couches LSTM. Je ne sais pas si c'est possible avec Keras. J'espère que quelqu'un pourra m'aider avec ça.

Le code de mon LSTM bidirectionnel à une seule couche est le suivant

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)

Les dimensions de mes valeurs x et y sont les suivantes.

(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))
10
udani

Eh bien, j'ai eu la réponse pour le problème posté sur les problèmes de Keras. J'espère que cela sera utile à quiconque recherche ce type d'approche ..__ Comment mettre en œuvre un LSTM bidirectionnel profond

16
udani

Vous pouvez utiliser keras.layers.wrappers.Bidirectional. Le manuel officiel peut être référencé ici, https://keras.io/layers/wrappers/#bidirectional

1
Tom

Maintenant, concevoir BiLSTM est plus facile. Une nouvelle classe Bidirectional est ajoutée conformément à la documentation officielle ici: https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional

Pour le résultat de l'entraînement et le code complet

0
Partha Sen