python - 使用 Keras、Tensorflow 进行多时间序列维度的 RNN 时间序列预测

标签 python numpy machine-learning keras recurrent-neural-network

我正在尝试在某些时间序列集上运行 RNN/LSTM 网络。应该提到的是时间序列正在分类。我有大约 600 个不同的时间序列,每个时间序列都有 930 个带有特征的时间步长。我已将我的数据结构化为一个 numpy 3D 数组,其结构如下:

X = [666 observations/series, 930 timesteps in each observation, 15 features]
Y = [666 observations/series, 930 timesteps in each observation, 2 features]

对于训练和验证数据,我将数据分成 70/30。所以 Train_X = [466, 930, 15] 和 Train_Y = [200, 930, 2]。

我的网络出现一个错误,表明它期望输入是二维的,并且它得到一个形状为 (466, 930, 2) 的数组。我的代码如下:

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Bidirectional

Train_X = new_ped_data[0:466]
Test_X = new_ped_data[466:]

Train_Y = new_ped_valid_data[0:466]
Test_Y = new_ped_valid_data[466:]

model = Sequential()
model.add(Bidirectional(LSTM(20, return_sequences=True),
                        input_shape=Train_X.shape[1:]))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(5))
model.compile(loss='mae', 
              optimizer='rmsprop')

model.fit(Train_X, Train_Y, epochs = 30, batch_size = 32, 
      validation_data =(Test_X, Test_Y))

我只是想让模型运行起来。完成后,我将调整架构和拟合参数。我应该提一下,其中一个分类输出可能不是必需的。关于我如何设置架构以便在输入时间序列时我将获得每个时间步长的网络分类值的任何建议?

Error was: ValueError: Error when checking target: expected dense_9 to
have 2 dimensions, but got array with shape (466, 930, 2)

最佳答案

您的输出也具有顺序性。 LSTM 默认有一个标志 return_sequences=False。这使得您的序列在第二个 LSTM 层之后被压缩为一个向量。为了改变这种尝试:

model = Sequential()
model.add(Bidirectional(LSTM(20, return_sequences=True),
                    input_shape=Train_X.shape[1:]))
model.add(Bidirectional(LSTM(10, return_sequences=True)))
model.add(Dense(5))
model.compile(loss='mae', 
          optimizer='rmsprop')

关于python - 使用 Keras、Tensorflow 进行多时间序列维度的 RNN 时间序列预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253348/

相关文章:

python - Pandas 绘制 Timedelta 系列,在选定时间使用垂直线

python - numpy 列表理解和 +=/-= 运算符

r - 使用 mRMRe 包从功能集中选择功能

python - 部署 python 时,我们有哪些 Web 服务器选项?该过程是否效率低下?

python - getmtime() 与 datetime.now() :

python - 将numpy数组拆分为 block

python - 如何计算岭回归模型的 RMSE

scala - 为什么在某些阶段之后,所有任务都分配给spark中的一台机器(执行器)?

python - 如何从不同的Python脚本调用Python脚本?

python - NumPy 更改特定行中符合条件的元素