使用Keras和Tensorflow进行多维时间序列的RNN时间序列预测

我正在尝试在一个时间序列集上运行一个RNN/LSTM网络。需要提到的是,这些时间序列是进行分类处理的。我有大约600个不同的时间序列,每个时间序列有930个时间步,每个时间步内包含特征。我将数据结构化为一个三维的numpy数组,结构如下:

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 MinMaxScalerfrom sklearn.preprocessing import LabelEncoderfrom sklearn.metrics import mean_squared_errorfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.layers import BidirectionalTrain_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 tohave 2 dimensions, but got array with shape (466, 930, 2)

回答:

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

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注