在构建 LSTM 时,我们需要通过以下方式提供输入形状信息:
input_shape = () # a tuple
或者,通过:
input_length = () # an integer
input_dim = () # an integer
我对这两个数量感到有点困惑。它们表明什么?
另外,input_dim是所谓的时间步长吗?
我将尝试尽可能简化输入形状参数:在 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
我们可以在两个场景中理解这一点,时间序列数据和 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 以获取时间序列数据。