张量流中的状态静态rnn

时间:2018-03-04 18:15:30

标签: tensorflow recurrent-neural-network

我尝试使用Tensorflow与RNN合作。我使用了这个repos中的以下函数:

def RNN(x, weights, biases):

    # Prepare data shape to match `rnn` function requirements
    # Current data input shape: (batch_size, timesteps, n_input)
    # Required shape: 'timesteps' tensors list of shape (batch_size, n_input)

    # Unstack to get a list of 'timesteps' tensors of shape (batch_size, n_input)
    x = tf.unstack(x, timesteps, 1)

    # Define a lstm cell with tensorflow
    lstm_cell = rnn.BasicLSTMCell(num_hidden, forget_bias=1.0)

    # Get lstm cell output
    outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)

    # Linear activation, using rnn inner loop last output
return tf.matmul(outputs[-1], weights['out']) + biases['out']

我知道outputs是一个包含展开神经网络中间输出的列表。我可以验证len(outputs)等于timesteps。但是,我想知道为什么len(states)等于2。我想我应该只包含网络的最终状态。 你能帮忙解释一下吗? 感谢。

1 个答案:

答案 0 :(得分:1)

确认评论中的讨论:使用BasicLSTMCell构建静态RNN时,state(c, h)的两元组,其中c是最后一个单元格state和h是最终的隐藏状态。最终的单元隐藏状态实际上等于outputs中的最终输出。您可以通过阅读source code来证实这一点(请参阅BasicLSTMCell' call方法)。