【问题标题】:How to get the states for each step and for each layer in a multilayer RNN using dynamic_rnn如何使用 dynamic_rnn 获取多层 RNN 中每一步和每一层的状态
【发布时间】:2019-12-04 06:36:05
【问题描述】:

我正在构建一个与中设置相同的多层 RNN(使用 MultiRNNCell 包裹单元格,然后使用 dynamic_rnn 调用):

Outputs and State of MultiRNNCell in Tensorflow

如上述问题所述,dynamic_rnn 返回 输出,状态 = tf.nn.dynamic_rnn(...)

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

(1) 有没有什么方法可以以简单的方式评估所有时间步的输出每一层(不仅仅是由 dynamic_rnn 返回的最后一层),而无需运行一个-递归执行RNN并读取每一步的状态?

(2) 是否为最后(顶层)层指示返回的输出?

【问题讨论】:

    标签: python python-3.x tensorflow recurrent-neural-network


    【解决方案1】:

    根据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,则确实来自顶层。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2021-12-24
      • 2016-05-20
      • 2017-12-17
      相关资源
      最近更新 更多