如何使用 Keras 实现深度双向 LSTM?

Posted

技术标签:

【中文标题】如何使用 Keras 实现深度双向 LSTM?【英文标题】:How to implement a deep bidirectional LSTM with Keras? 【发布时间】:2016-05-12 04:53:32 【问题描述】:

我正在尝试实现基于 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))

【问题讨论】:

【参考方案1】:

好吧,我得到了关于 Keras 问题的问题的答案。希望这对寻找这种方法的任何人都有用。 How to implement deep bidirectional -LSTM

【讨论】:

【参考方案2】:

您可以使用keras.layers.wrappers.Bidirectional。 官方手册可以参考这里,https://keras.io/layers/wrappers/#bidirectional

【讨论】:

【参考方案3】:

现在设计 BiLSTM 更容易了。根据官方文档在这里添加了一个新类Bidirectional:https://www.tensorflow.org/api_docs/python/tf/keras/layers/Bidirectional

For training result & full code

【讨论】:

【参考方案4】:
model.add(Bidirectional(LSTM(64)))

Keras example

【讨论】:

以上是关于如何使用 Keras 实现深度双向 LSTM?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 keras 中使用 Conv1D 和双向 LSTM 对每个时间步进行多类分类?

Keras深度学习实战(33)——基于LSTM的序列预测模型

keras。初始化双向LSTM。传递单词嵌入

如何在keras中堆叠多个lstm?

Keras深度学习实战(29)——长短时记忆网络详解与实现

Keras深度学习实战(29)——长短时记忆网络详解与实现