我想将时间序列输入LSTM以执行预测。
可以说我有10000个样本。现在,为了将时间序列输入到我的LSTM中,我将其重塑为(样本,时间步长,功能)。就我而言,我使用timesteps = 50来创建子序列并执行t + 1的预测。所以我以x.shape=(9950,50,1)
结尾。到目前为止一切顺利。
我的模特
model= Sequential()
model.add(LSTM(50,return_sequences=True,input_shape=(50,1)))
model.add(Dense(out_dim, activation = 'sigmoid'))
model.compile(loss='mse', optimizer='adam')
现在我要创建人工功能,例如我想将信号的fft用作功能。如何将其输入LSTM?仅计算fft,将其附加到Dataframe并一起重塑形状是否合法,所以我最终得到了(9950,50,2)
?
问题基本上是:
预先感谢
答案 0 :(得分:0)
您根据输入数据计算出的任何额外功能只是另一个功能,所以:
input_shape=(50, 1+extra_features)
一样喂食它,并且必须在将其传递给模型之前将它们串联起来。所以是的,输入形状现在为(9950, 50, 2)
。您还可以编写自定义图层来计算模型中的这些特征,但是模型每次都会对其进行计算。如果您先验计算,则优点是可以保存/缓存它。
如果您具有非时间序列功能,则现在需要移至functional API并具有多个输入:1是时间序列,而另一个则不是:
series_in = Input(shape=(50, 2))
other_in = Input(shape(extra_features,)) # not a timeseries just a vector
# An example graph
lstm_out = LSTM(128)(series_in)
merged = concatenate([lstm_out, other_in])
out = Dense(out_dim, activation='sigmoid')(merged)
model = Model([series_in, other_in], out)
model.compile(...)
在这种情况下,我们有2个模型输入,可以在任何点使用辅助功能。在该示例中,我在最终的Dense层之前合并以辅助谓词以及LSTM提取的时间序列特征。