Keras-意外的预测结果

Keras-意外的预测结果,keras,lstm,predict,Keras,Lstm,Predict,我试图创建一个keras LSTM来预测时间序列。我的x_序列形状像3000,15,10个示例、时间步、功能,y_序列形状像3000,15,1,我正在尝试构建一个多对多模型,每个序列10个输入功能,每个序列1个输出/序列 我使用的代码是: 模型=顺序 model.addLSTM 10, 输入_形=15,10,, return\u sequences=True 型号:addDropout0.2 model.addLSTM 100, return\u sequences=True 型号:addDro

我试图创建一个keras LSTM来预测时间序列。我的x_序列形状像3000,15,10个示例、时间步、功能,y_序列形状像3000,15,1,我正在尝试构建一个多对多模型,每个序列10个输入功能,每个序列1个输出/序列

我使用的代码是:

模型=顺序 model.addLSTM 10, 输入_形=15,10,, return\u sequences=True 型号:addDropout0.2 model.addLSTM 100, return\u sequences=True 型号:addDropout0.2 model.addDense1,激活='linear' model.compileloss=mse,optimizer=rmsprop 模型拟合 x_火车,y_火车, 批次大小=1,nb=1,验证分割=0.05 预测=model.predictx\u测试 我的数据如下所示:

x_列车=[ [ [3,4,3,1.5,0,7…],10个特征 [2,4,1,1,4,3....], …15个时间步 ], …3000个例子 ] y_列车=[ [ [0], [5], .... ], ..... ] 代码编译和拟合没有错误,但预测值不现实

期望值是介于0和~15之间的整数。然而,预测值在~-0.03和1之间浮动。此外,预测有15个时间步,但我实际上对第16个时间步预测的未来结果感兴趣

预测示例:

预测=[ [ [0.035478], [0.046423], [0.948723], .... ], .... ]
我的Keras版本是2.0.6,Python版本是3.4.5。

您可能应该将您的y_列重新缩放到0到1之间。假设y_序列和预测为numpy阵列:

y_train = y_train/15.0
完成后,您可以重新缩放预测

predicted = (predicted*15).astype(int)
我试图构建一个多对多模型,每个序列10个输入特性,每个序列1个输出

在我看来,您想要构建多对一模型。每个序列1个输出的10个输入特性

为此,您需要:

建造形状为3000,1的y_列车。y_列车将是未来预测,t+1时间的预测。如果你想预测更多的时间步长,调整你的y_序列和你的最后一个致密层。 如果您还没有,请缩放您的训练数据,因为神经网络需要缩放数据。 从最后一个LSTM层中删除返回序列,如下所示: 代码


好的,非常感谢,我会试试这个。你知道如何检索第16个预测吗?因为你是在x_测试上进行预测的,所以请确保x_测试中包含了第16个时间步。谢谢你,我将数据缩放到0到1之间,现在所有结果看起来都更加真实。我也仔细考虑过了,我将只使用15个时间步,但通过切断最后一个输入时间步并在开始处插入一个空的时间步来改变我的输入和结果。因此,每个x值对应于下一个y值。但是,结果仍然不正确,因为我收到的大多数结果都是相同的数字~0.018。你知道这是怎么回事吗?谢谢你的意见,但我确实仔细考虑过了,我想我真的需要一个多对多模型。基本上有必要预测我所有时间步的下一个结果。更改返回顺序的原因是什么?
model = Sequential()
model.add(LSTM(10, input_shape=(15, 10), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(100, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))