web-dev-qa-db-ja.com

Kerasでディープ双方向LSTMを実装する方法は?

LSTMベースの音声認識プログラムを実装しようとしています。これまで、Mergeレイヤーの例に従って双方向LSTMをセットアップできました(双方向LSTMとして機能していると思います)。次に、別の双方向LSTMレイヤーで試してみたいと思います。これにより、深い双方向LSTMになります。しかし、以前にマージされた2つのレイヤーの出力をLSTMレイヤーの2番目のセットに接続する方法を理解することはできません。 Kerasで可能かどうかはわかりません。誰かがこれを手伝ってくれることを願っています。

私の単層双方向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))
12
udani

まあ、私はケラスの問題に投稿された問題の答えを得ました。これがこの種のアプローチを探している人に役立つことを願っています。 ディープ双方向-LSTMの実装方法

18
udani

keras.layers.wrappers.Bidirectionalを使用できます。公式マニュアルはこちらで参照できます https://keras.io/layers/wrappers/#bidirectional

3
Tom

BiLSTMの設計が簡単になりました。新しいクラスBidirectionalが公式ドキュメントに従ってここに追加されます: https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional

トレーニング結果と完全なコードの場合

1
Partha Sen
model.add(Bidirectional(LSTM(64)))

ケラスの例

1
rosefun