带有Keras,Tensorflow的多时间序列维数的RNN时间序列预测

时间:2018-01-14 19:27:36

标签: 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]。

我的网络收到一个错误,表示它希望输入为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)

1 个答案:

答案 0 :(得分:1)

您的输出也具有顺序性。默认情况下,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')