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))
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
Vous pouvez utiliser keras.layers.wrappers.Bidirectional
. Le manuel officiel peut être référencé ici, https://keras.io/layers/wrappers/#bidirectional
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