Tensorflow LSTM-Cell

时间:2017-02-26 15:21:49

标签: python tensorflow output lstm

(使用python)

我对Tensorflow LSTM-Implementation有疑问。目前在TF中有几种实现,但我使用:

cell = tf.contrib.rnn.BasicLSTMCell(n_units)
  • 其中n_units是' parallel' LSTM细胞。

然后我打电话给我的输出:

 rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, x,
                        initial_state=initial_state, time_major=False)
  • 其中(time_major=Falsex的形状为(batch_size, time_steps, input_length)
  • 其中batch_size是我的batch_size
  • 其中time_steps是我的RNN将经历的时间步数
  • 其中input_length是我的一个输入向量的长度(在一个特定批次的一个特定时间步进入网络的向量)

我希望rnn_outputs的形状为(batch_size, time_steps, n_units, input_length),因为我没有指定另一个输出大小。 nn.dynamic_rnn的文档告诉我输出的形状为(batch_size, input_length, cell.output_size)tf.contrib.rnn.BasicLSTMCell的文档确实有一个属性output_size,默认为n_units(我使用的LSTM单元格数量)。

每个LSTM-Cell是否只为每个给定的时间步输出一个标量?我希望它输出一个输入向量长度的向量。从我现在的理解情况来看,情况似乎并非如此,所以我很困惑。你能告诉我是否是这种情况或者我如何改变它以输出每个单个lstm-cell的输入矢量大小的矢量?

1 个答案:

答案 0 :(得分:4)

我认为主要的困惑在于LSTM细胞论证的术语:num_units。不幸的是,顾名思义,它并不意味着" no。 LSTM细胞"这应该等于你的时间步数。它们实际上对应于隐藏状态(单元状态+隐藏状态向量)中的维数。 对dynamic_rnn()的调用会返回一个形状的张量:[batch_size, time_steps, output_size]其中,

(请注意这一点)output_size = num_units;如果(num_proj = None)在lstm单元格中 其中,output_size = num_proj;如果它被定义。

现在,通常,您将提取最后一次time_step的结果,并使用手动mat-mul + biases操作将其投影到输出维度的大小,或者使用LSTM单元格中的num_proj参数。
我经历了同样的困惑,不得不看起来非常深入,以清除它。希望这个答案可以解决其中的一些问题。