双向循环神经网络(Bidirectional Recurrent Neural Networks,Bi-RNN)的核心是把一个普通的单向的RNN拆分成两个方向,一个随着时间序列正向的,一个逆着时间序列反向的。这样当前时间节点的输出就可以同时利用正向、反向两个方向的信息,而不像普通RNN需要等到后面时间节点才可以获取未来时间信息。这两个不同方向的RNN之间不会共用state,它们之间没有直接连接。每一个时间的输入会分别传到正向和反向的RNN中,它们根据各自的状态产生输出,这两份输出会一起连接到Bi-RNN的输出节点,共同合成最终输出。
利用TensorFlow实现一个Bidirectional LSTM Classifier,并在MNIST数据集上测试。代码来自TensorFlow-Examples的开源实现。
https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/bidirectional_rnn.py
from __future__ import print_function
import tensorflow as tf
from tensorflow.contrib import rnn
import numpy as np
# Import MNIST