TensorFlow中MultiRNNCell的state_size是什么?

zsh*_*tom 11 tensorflow

使用以下配置为BasicLSTM单元格:

...
num_layers = 2 
num_steps = 10 
hidden_size = 200    
...
Run Code Online (Sandbox Code Playgroud)

我使用2隐藏层模型:

lstm_cell = rnn_cell.BasicLSTMCell(hidden_size, forget_bias=0.0) 
cell = rnn_cell.MultiRNNCell([lstm_cell] * 2)
Run Code Online (Sandbox Code Playgroud)

什么是cell.state_size

我得到了30 x 800,但我无法理解它是怎么回事?

PS:请参阅https://github.com/tensorflow/tensorflow/blob/97f585d506cccc57dc98f234f4d5fcd824dd​​3c03/tensorflow/python/ops/rnn_cell.py#L353中的源代码

它似乎回归statesize2 * unitsize.但为什么州的规模应该是单位面积的两倍?

小智 11

对于单身而言BasicLSTMCell,(c=200, h=200)在你的情况下,国家是一个元组.c是200个单位(神经元)的细胞状态,是200个单位h的隐藏状态.

要理解这一点,请考虑一个香草RNN细胞.它只有一个隐藏状态从一次性步骤传递到下一个步骤.这是BasicRNNCell在TensorFlow中实现的情况.如果你这样做,它的状态是h = 200的单个整数tf.nn.rnn_cell.BasicRNNCell(200).

LSTM为纵向存储器添加了一个额外的单元层,其大小与隐藏层相同,因此LSTM的整体状态为2x200 = 400.

的引言部分文章可能有助于.


不得不说TensorFlow的文档对于初学者来说有点过于简洁.


fab*_*ioM 6

要计算LSTM步骤,您需要应用四个函数,每个函数都包含维度 hidden_size:

  • 输入门
  • 输出门
  • 忘了门
  • 隐藏的状态

所以你需要 hidden_size * 4 = 200 * 4 = 800

30来自你的批量大小,因为你正在处理每批次30个样品.

这就是你的细胞记忆消耗 (30, 800)

请参阅Colah的博客文章,其中更详细地解释了这些操作.