深度 RNN

一个朴素的想法就是把一层层神经元堆叠起来,正如图 14-12 所示的那样,它呈现了一种深度 RNN。

Figure 14-12

为了用 TensorFlow 实现深度 RNN,可先创建一些神经单元,然后堆叠进MultiRNNCell

以下代码中创建了 3 个相同的神经单元(当然也可以用不同类别的、包含不同不同数量神经元的单元)

  1. n_neurons = 100
  2. n_layers = 3
  3. basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)
  4. multi_layer_cell = tf.contrib.rnn.MultiRNNCell([basic_cell] * n_layers)
  5. outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)

这些代码就完成了这部分堆叠工作。status变量包含了每层的一个张量,这个张量就代表了该层神经单元的最终状态(维度为[batch_size, n_neurons])。

如果在创建MultiRNNCell时设置了state_is_tuple=False,那么status变量就变成了单个张量,它包含了每一层的状态,其在列的方向上进行了聚合,维度为[batch_size, n_layers*n_neurons]

注意在 TensorFlow 版本 0.11.0 之前,status是单个张量是默认设置。