用于时间序列预测的Keras RNN设计

时间:2018-06-04 13:08:01

标签: keras

我正在开发一个关于时间序列预测的机器学习项目,使用Keras库创建RNN。我取得了不错的成绩,但我在确定各层的设计时遇到了一些麻烦。我通过反复试验来解决这个问题,而且我似乎无法在线找到关于如何选择每个层上的层数和神经元的指南。我应该怎么做呢?

我的数据有14个变量,每个变量510天,我使用80%进行培训(其中20%用于验证),其余用于测试。 我正在将网络输入重新设置为(510,1,14),并且我已经完成了几次向后渲染值的模拟,因此形状结束(510,1,14 * window_days )。我不能理解将1设置为时间步长并将先前时间步长的值作为变量添加是正确的方法,或者我是否应该重新整形输入。

这是我使用的模型:

model = Sequential()
model.add(LSTM(units = 4, dropout=0, 
               input_shape=(1, train_X.shape[2]), 
               return_sequences=True)) 
model.add(LSTM(units = 1))
model.add(Dense(units = train_Y.shape[1], activation = 'linear'))

model.compile(optimizer = 'adam', loss = 'mean_squared_error')

history = model.fit(train_X, train_Y, 
                    epochs=400, batch_size=150,
                    validation_split=0.2,shuffle=False)

1 个答案:

答案 0 :(得分:0)

您目前没有根据时间序列进行预测。您的时间步长的数量为1,由input_shape=(1, train_x.shape[2])设置。所以即使你有一个窗口LSTM,你只是看一下LSTM的一次迭代。这类似于展平时间步和使用密集层。

相反,请将您的数据保存为(510,14),这是510天,每天14个功能。现在,您可以使用TimeseriesGenerator来覆盖序列并生成(samples,window_size,14)。现在,LSTM将实际处理窗口大小上的14个输入序列。