在构建LSTM时,我们需要通过以下方式提供输入形状信息:
input_shape = () # a tuple
或者,通过:
input_length = () # an integer
input_dim = () # an integer
我对这两个数量感到有些困惑。它们表明了什么?
另外,input_dim是所谓的时间步吗?
答案 0 :(得分:2)
我会尝试尽可能简化输入形状参数: 对于LSTM(或通常用于RNN),输入形状可以通过以下方式提供:
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)))
使用单独的input_dim和input_length参数
在这里,您可以指定input_dim,即数据中的要素数和input_length,即数据中单个观察的序列长度。例如
model.add(LSTM(16, input_length= 50, input_dim =10))
。这相当于上述方式
最后,您可以通过batch_input_size参数指定批处理的大小(上面未指定)。如果LSTM是有状态的,则必须预先指定批处理大小。 batch_input_size =(batch_size,input_length,input_dim)
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。