webentwicklung-frage-antwort-db.com.de

Wie implementiere ich ein tiefes bidirektionales LSTM mit Keras?

Ich versuche, einen LSTM-basierten Spracherkenner zu implementieren. Bisher konnte ich bidirektionales LSTM einrichten (ich denke, es arbeitet als bidirektionales LSTM), indem Sie dem Beispiel in der Merge-Ebene folgen. Jetzt möchte ich es mit einer anderen bidirektionalen LSTM-Schicht versuchen, die es zu einem tiefen bidirektionalen LSTM macht. Ich kann jedoch nicht herausfinden, wie die Ausgabe der zuvor zusammengeführten zwei Ebenen zu einem zweiten Satz von LSTM-Schichten verbunden wird. Ich weiß nicht, ob es mit Keras möglich ist. Hoffe, jemand kann mir dabei helfen.

Der Code für mein einschichtiges bidirektionales LSTM lautet wie folgt

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)

Abmessungen meiner x- und y-Werte sind wie folgt.

(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

Nun, ich habe die Antwort auf das Problem in den Keras-Ausgaben erhalten. Hoffe, dass dies für jeden nützlich ist, der nach einer solchen Herangehensweise sucht. Implementieren von Deep Bidirectional -LSTM

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

Keras-Beispiel

1
rosefun

Sie können keras.layers.wrappers.Bidirectional..__ verwenden. Das offizielle Handbuch kann hier referenziert werden. https://keras.io/layers/wrappers/#bidirectional

1
Tom

Das Entwerfen von BiLSTM ist jetzt einfacher. Eine neue Klasse Bidirectional wird gemäß dem offiziellen Dokument hier hinzugefügt: https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional

Für Trainingsergebnis & vollständigen Code

0
Partha Sen