我尝试使用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
。我想我应该只包含网络的最终状态。
你能帮忙解释一下吗?
感谢。
答案 0 :(得分:1)
确认评论中的讨论:使用BasicLSTMCell
构建静态RNN时,state
是(c, h)
的两元组,其中c
是最后一个单元格state和h
是最终的隐藏状态。最终的单元隐藏状态实际上等于outputs
中的最终输出。您可以通过阅读source code来证实这一点(请参阅BasicLSTMCell
' call
方法)。