使用以下BasicLSTM
单元格的配置:
...
num_layers = 2
num_steps = 10
hidden_size = 200
...
我使用2个隐藏图层模型:
lstm_cell = rnn_cell.BasicLSTMCell(hidden_size, forget_bias=0.0)
cell = rnn_cell.MultiRNNCell([lstm_cell] * 2)
什么是cell.state_size
?
我得到了30 x 800,但我无法理解它是怎么回事?
中的源代码似乎将statesize
作为2 * unitsize
返回。但为什么州的规模应该是单位面积的两倍呢?
答案 0 :(得分:10)
对于单个BasicLSTMCell
,状态是(c=200, h=200)
的元组,在您的情况下。 c
是200个单位(神经元)的单元状态,h
是200个单位的隐藏状态。
要理解这一点,请考虑一个香草RNN细胞。它只有一个隐藏状态从一次性步骤传递到下一个步骤。这是TensorFlow中实现的BasicRNNCell
的情况。如果你tf.nn.rnn_cell.BasicRNNCell(200)
,它的状态是h = 200的单个整数。
LSTM为纵向存储器添加了一个额外的单元层,其大小与隐藏层相同,因此LSTM的整体状态为2x200 = 400.
this paper的介绍部分可能会有所帮助。
不得不说TensorFlow的文档对于初学者来说有点过于简洁。
答案 1 :(得分:6)
要计算LSTM步骤,您需要应用四个函数,每个函数都使用维hidden_size
:
所以你需要hidden_size * 4 = 200 * 4 = 800
30
来自您的批量大小,因为您每批处理30个样本。
这就是你的细胞记忆消耗(30, 800)
请参阅Colah's blog post更详细地解释这些操作。
答案 2 :(得分:2)
看看这个 http://deeplearning.net/tutorial/lstm.html
lstm有两个输出,C_t(state)和h_t(hidden),它们以状态返回。输出o_t是(h_(t-1),C_t,x_t)的函数,它是用于分类的输出 output_t,[C_t,h_t] = tf.rnn.rnn(...)