首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bidirectional_dynamic_rnn与stack_bidirectional_dynamic_rnn在Tensorflow中的差异

bidirectional_dynamic_rnn与stack_bidirectional_dynamic_rnn在Tensorflow中的差异
EN

Stack Overflow用户
提问于 2018-03-12 18:35:36
回答 1查看 5.7K关注 0票数 13

我正在建立一个具有多个LSTM叠加的动态RNN网络。我看到有两种选择

代码语言:javascript
复制
# 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)

vs

代码语言:javascript
复制
output = tf.contrib.rnn.stack_bidirectional_dynamic_rnn(cells_fw, cells_bw, INPUT,
sequence_length=LENGTHS, dtype=tf.float32)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-27 13:14:55

如果您希望有多个层向后或向前地传递信息,那么有两种设计方法。假设前一层由两层F1、F2和背字层组成-- B1、B2。

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

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

在这里,第一层和第二层之间的黑点表示一个级联。即,前向和后向单元的输出连接在一起,并馈送到下一上层的后向和前向层。这意味着F2和B2都接收完全相同的输入,并且在后向和向前层之间有一个显式的连接。载于“深度递归神经网络语音识别” Graves等人。将此概述如下:

..。每个隐藏层在下面的水平接收来自前向和后向层的输入。

这种连接只在未堆叠的BiRNN (第一个映像)中隐式发生,即映射回输出时。就我的目的而言,堆叠的BiRNN通常表现得更好,但我想这取决于您的问题设置。但值得一试的是!

编辑

针对您的评论:我的回答是基于函数tf.contrib.rnn.stack_bidirectional_dynamic_rnn的文档,它说:

堆叠几个双向rnn层。将组合的前向和后向层输出用作下一层的输入。tf.bidirectional_rnn不允许在层间共享向前和向后的信息。

此外,我还查看了此链接下可用的实现。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49242266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档