对于双向单层rnn,可以直接用tf.nn.bidirectional_dynamic_rnn()这个接口。但是,如果是深层双向,这个函数是有问题的,具体在这篇博客中解释了:https://blog.csdn.net/u012436149/article/details/71080601/ 简单说就是:bi-rnn
实际上是依靠dynamic-rnn
实现的,如果我们使用MuitiRNNCell(多层rnn需要用这个函数)
的话,那么每层之间不同方向之间交互就被忽略了.
所以,就像上面那篇博客自己写了个stacked_bidirectional_rnn函数一样,tensorflow的contrib里也有人贡献了
tf.contrib.rnn.stack_bidirectional_dynamic_rnn或者tf.contrib.rnn.stack_bidirectional_rnn这两个个函数(dynamic的是可以处理变长步长的函数),来快速搭建双向深层rnn,随着版本更新,现在不确定tf.nn.bidirectional_dynamic_rnn
是否已经支持深层双向,所以目前用contrib里面这个是最佳选择。
对于两个函数的使用,可以参考这篇博客:https://blog.csdn.net/lijin6249/article/details/78955175或https://www.jianshu.com/p/3540c6711d4f