如何使用 dynamic_rnn 获取多层 RNN 中每个步骤和每个层的状态

How to get the states for each step and for each layer in a multilayer RNN using dynamic_rnn

我正在构建一个多层 RNN,其设置与(使用 MultiRNNCell 包裹细胞,然后使用 dynamic_rnn 调用)相同:

并且如上述问题所述,dynamic_rnn returns 输出,状态 = tf.nn.dynamic_rnn(...)

输出只提供了我猜想来自顶层的输出(因为形状是batch_size x steps x state_size)。但是,状态 return 每层的输出(具有 num_layer 个元素的元组,每个元素都包含该层的最后一个状态)。

(1) 有什么方法可以评估所有时间步的输出 每一层 (不仅仅是最后一层 return 由 dynamic_rnn) 在没有 运行 递归一步 RNN 的情况下以简单的方式读取每一步的状态?

(2) 输出 returned 是否指示最后(顶层)层?

根据 tf.nn.rnn_cell.MultiRNNCell 的文档,您应该安全地执行以下操作:

cell_1 = tf.nn.rnn_cell.GRUCell(7, name="gru1")
cell_2 = tf.nn.rnn_cell.GRUCell(7, name="gru2")
outputs_1, states_1 = tf.nn.dynamic_rnn(cell_1, X, dtype=tf.float32)
outputs_2, states_2 = tf.nn.dynamic_rnn(cell_2, outputs_1, dtype=tf.float32)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    first_layer_outputs = sess.run(outputs_1)
    second_layer_outputs = sess.run(outputs_2)

至于tf.nn.dynamic_rnn返回的输出,如果提供的单元格是tf.nn.rnn_cell.MultiRNNCell,它们确实来自顶层。