(使用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=False
)x
的形状(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 回答
我认为主要的困惑在于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参数 .我经历了同样的困惑,不得不看起来非常深入,以清除它 . 希望这个答案可以解决其中一些问题 .