Keras:LSTM中的input_dim和input_length的区别

时间:2016-11-16 23:47:53

标签: keras lstm

在构建LSTM时,我们需要通过以下方式提供输入形状信息:

input_shape = () # a tuple

或者,通过:

input_length = () # an integer
input_dim = () # an integer

我对这两个数量感到有些困惑。它们表明了什么?

另外,input_dim是所谓的时间步吗?

2 个答案:

答案 0 :(得分:2)

我会尝试尽可能简化输入形状参数: 对于LSTM(或通常用于RNN),输入形状可以通过以下方式提供:

  1. input_shape关键字参数:input_shape = (input_length, input_dim) 其中input_length =序列的长度,input_dim =特征/变量的数量。如果未提供值,则表示可以预期任何正整数。在这里,您没有提到批量大小,即在训练期间更新权重的观察数量。例如 input_length = 50(这是你的序列长度) input_dim = 10(这是数据中输入要素的数量)

    model.add(LSTM(16, input_shape = (50,10)))

  2. 使用单独的input_dim和input_length参数 在这里,您可以指定input_dim,即数据中的要素数和input_length,即数据中单个观察的序列长度。例如 model.add(LSTM(16, input_length= 50, input_dim =10))。这相当于上述方式

  3. 最后,您可以通过batch_input_size参数指定批处理的大小(上面未指定)。如果LSTM是有状态的,则必须预先指定批处理大小。 batch_input_size =(batch_size,input_length,input_dim)

  4. model.add(LSTM(16,batch_input_size = (None,50,10)))相当于以上两个

    model.add(LSTM(16,batch_input_size = (32,50,10)))批量大小为32

答案 1 :(得分:0)

我们可以在时间序列数据和NLP的两种情况下理解这一点。

对于时间序列数据,假设我们要使用下面的数据集来预测温度,该数据集是两周的逐日温度。 [23.4、23.4、22.4、23.4、26.4、24.4、27.4、28.4、21.4、25.4、23.4、23.4、23.4、24.5] 现在我们要获取5天的温度并希望预测第6天的温度,在这种情况下,input_length =()将为5(例如23.4、23.4、22.4、23.4、26.4),而input_dim =()将为1(值每天的温度)。

在NLP的情况下,假设句子长度为4,例如“您好吗”。并且我们的嵌入层的输出假设为8,则句子的每个单词将由长度为8的向量表示,因此“ hello”将为长度为8的向量,“ are”为向量或长度为8的依此类推。 在这种情况下,input_length =()将为4(句子长度),而input_dim =()将为8(嵌入向量的长度)。

有关时间序列数据的LSTM的详细信息,请参考https://www.tensorflow.org/tutorials/structured_data/time_series