【问题标题】:Keras RNN design for time series prediction用于时间序列预测的 Keras RNN 设计
【发布时间】:2018-11-13 20:06:03
【问题描述】:

我正在开发一个关于时间序列预测的机器学习项目,使用 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)

【问题讨论】:

    标签: keras


    【解决方案1】:

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

    相反,请将您的数据保留为 (510, 14),即 510 天和每天 14 个特征。现在您可以使用TimeseriesGenerator 对序列进行窗口化并生成(samples, window_size, 14)。现在,LSTM 将实际处理超过窗口大小的 14 个输入序列。

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 2020-04-22
      • 2017-05-16
      • 2023-04-08
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多