Rah*_*hul 6 tensorflow recurrent-neural-network
我正在建立一个堆叠多个LSTM的动态RNN网络.我看到有两种选择
# 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)
Run Code Online (Sandbox Code Playgroud)
VS
output = tf.contrib.rnn.stack_bidirectional_dynamic_rnn(cells_fw, cells_bw, INPUT,
sequence_length=LENGTHS, dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)
两种方法有什么区别,哪一方比另一方更好?
kaf*_*man 23
如果您希望有多个层可以及时向后或向前传递信息,那么有两种方法可以设计它.假设前向层由两个层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不允许在层之间共享前向和后向信息.
另外,我查看了此链接下的可用实现.
| 归档时间: |
|
| 查看次数: |
3166 次 |
| 最近记录: |