tensorflow - Tensorflow中bidirectional_dynamic_rnn和stack_bidirectional_dynamic_rnn的区别

标签 tensorflow recurrent-neural-network

我正在构建一个堆叠多个 LSTM 的动态 RNN 网络。我看到有 2 个选项

# cells_fw and cells_bw are list of cells eg LSTM cells
stacked_cell_fw = tf.contrib.rnn.MultiRNNCell(cells_fw)
stacked_cell_bw = tf.contrib.rnn.MultiRNNCell(cells_bw)

output = tf.nn.bidirectional_dynamic_rnn(
          stacked_cell_fw, stacked_cell_bw, INPUT,
          sequence_length=LENGTHS, dtype=tf.float32)

对比
output = tf.contrib.rnn.stack_bidirectional_dynamic_rnn(cells_fw, cells_bw, INPUT,
sequence_length=LENGTHS, dtype=tf.float32)

这两种方法有什么区别,一种比另一种更好吗?

最佳答案

如果你想有多个层来及时向后或向前传递信息,有两种设计方法。假设前向层由两层 F1、F2 组成,后向层由两层 B1、B2 组成。

如果您使用 tf.nn.bidirectional_dynamic_rnn该模型将如下所示(时间从左到右流动):

enter image description here

如果您使用 tf.contrib.rnn.stack_bidirectional_dynamic_rnn该模型将如下所示:

enter image description here

此处第一层和第二层之间的黑点表示串联。即,前向和后向单元的输出连接在一起并馈送到下一个上层的后向和前向层。这意味着 F2 和 B2 接收完全相同的输入,并且后向层和前向层之间存在显式连接。在 "Speech Recognition with Deep Recurrent Neural Networks"格雷夫斯等人。总结如下:

... every hidden layer receives input from both the forward and backward layers at the level below.



这种连接仅在未堆叠的 BiRNN(第一张图像)中隐式发生,即映射回输出时。对于我的目的,堆叠的 BiRNN 通常表现更好,但我想这取决于您的问题设置。但可以肯定的是,尝试一下是值得的!

编辑

回应您的评论:我的回答基于函数 tf.contrib.rnn.stack_bidirectional_dynamic_rnn 的文档其中说:

Stacks several bidirectional rnn layers. The combined forward and backward layer outputs are used as input of the next layer. tf.bidirectional_rnn does not allow to share forward and backward information between layers.



另外,我查看了 this link 下可用的实现.

关于tensorflow - Tensorflow中bidirectional_dynamic_rnn和stack_bidirectional_dynamic_rnn的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49242266/

相关文章:

machine-learning - tensorflow 的简单线性回归

machine-learning - tensorflow InvalidArgumentError : "You must feed a value for placeholder tensor"

python - Tensorflow 中的成对排名损失函数

r - 使用 Softmax 转换输出激活会产生相似的值

python - 神经机器翻译模型预测偏差一

python - tf.train.range_input_producer(epoch_size, shuffle=True) 不会终止也不会引起 CPU/GPU 负载

machine-learning - 是什么导致 LSTM 的准确率如此之低?

python - 无法从 TensorFlow 或 Keras 中的 Google Cloud Storage 存储桶加载图像

tensorflow - 使用带有 DQN 算法的张量板

tensorflow - 如何在不同的 RNN 单元之间共享权重,这些单元在 Tensorflow 中输入不同的输入?