我是深度学习和 LSTM(使用 keras)的新手。我正在尝试解决多步提前时间序列预测。我有 3 个时间序列:A、B 和 C,我想预测 C 的值。我正在训练一个 LSTM,反馈 3 个步骤的数据点来预测未来接下来的 3 个步骤。输入数据如下所示:
X = [[[A0, B0, C0],[A1, B1, C1],[A2, B2, C2]],[[ ...]]]
尺寸:(1000, 3, 3)
. 输出是:
y = [[C3, C4, C5],[C4, C5, C6],...]
尺寸:(1000, 3)
.
我正在使用一个带有 1 个隐藏层(50 个神经元)的简单 LSTM。我用 keras 设置了一个 LSTM:
n_features = 3
neurons = 50
ahead = 3
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Dense(input_dim=neurons, output_dim=ahead))
model.add(Activation('linear'))
model.compile(loss='mae', optimizer='adam')
model.fit(X, y, epochs=50)
这个模型工作正常。现在,我也想预测 B 的值(使用相同的输入)。因此,我尝试以与对具有多个特征的训练类似的方式重塑输出:
y = [[[B3, C3],[B4, C4],[B5, C5]],[[ ...]]]
使其具有尺寸:(1000, 3, 2)
. 但是,这给了我一个错误:
Error when checking target: expected activation_5 to have 2 dimensions,
but got array with shape (1000, 3, 2)
我猜网络的结构需要改变。我试图修改model.add(Dense(input_dim=neurons, output_dim=ahead))
没有成功。我应该以y
不同的方式重塑吗?网络结构错了吗?