我正在尝试实现基于LSTM的语音识别器。到目前为止,我可以通过遵循Merge层中的示例来设置双向LSTM(我认为它可以作为双向LSTM)。现在我想用另一个双向LSTM层来尝试它,这使它成为一个深度双向LSTM。但我无法弄清楚如何将先前合并的两层的输出连接到第二组LSTM层。我不知道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))
答案 0 :(得分:17)
好吧,我得到了关于Keras问题的答案。希望这对任何寻求这种方法的人都有用。 How to implement deep bidirectional -LSTM
答案 1 :(得分:3)
您可以使用keras.layers.wrappers.Bidirectional
。
官方手册可在此处引用,https://keras.io/layers/wrappers/#bidirectional
答案 2 :(得分:1)
现在设计BiLSTM更容易。根据此处的官方文档,添加了新的类Bidirectional
:https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional
答案 3 :(得分:0)
model.add(Bidirectional(LSTM(64)))