首页 文章

Tensorflow LSTM-Cell的输出

提问于
浏览
6

(使用python)

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

cell = tf.contrib.rnn.BasicLSTMCell(n_units)
  • 其中n_units是'parallel' LSTM-Cells的数量 .

然后得到我的输出我打电话:

rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell, x,
                        initial_state=initial_state, time_major=False)
  • where(as 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 回答

  • 4

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

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

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

相关问题