我试图创建一个keras
LSTM来预测时间序列。我的x_train的形状像3000,15,10(例如,时间步,特征),y_train就像3000,15,1而我试图构建多对多的模型(每个序列10个输入特征使得1个输出/序列)。
我使用的代码是:
model = Sequential()
model.add(LSTM(
10,
input_shape=(15, 10),
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(
100,
return_sequences=True))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))
model.compile(loss="mse", optimizer="rmsprop")
model.fit(
x_train, y_train,
batch_size=1, nb_epoch=1, validation_split=0.05)
predicted = model.predict(x_test)
我的数据如下:
x_train = [
[
[3,4,3,1.5,0,7....], # 10 Features
[2,4,1,1,4,3....],
.... # 15 Timesteps
],
.... # 3000 Examples
]
y_train = [
[
[0],
[5],
....
],
.....
]
代码编译和拟合没有错误,但预测值不现实。
期望值是0到15之间的整数。然而,预测是在-0.03和1之间浮动。此外,预测有15个时间步,但我实际上对第16个时间步(预测的未来结果)感兴趣。
示例预测:
predicted = [
[
[0.035478],
[0.046423],
[0.948723],
....
],
....
]
我的keras
版本为2.0.6,python
版本为3.4.5。
非常感谢任何帮助!
答案 0 :(得分:1)
您应该将y_train重新缩放到介于0和1之间。假设y_train和预测是numpy数组:
y_train = y_train/15.0
然后,您可以在完成后重新调整预测。
predicted = (predicted*15).astype(int)
答案 1 :(得分:0)
我正在尝试构建多对多模型(每个序列10个输入要素使1个输出/序列)。
在我看来,你想建立一个多对一的模型。 (每个序列1个输出的10个输入功能)
为此你需要:
码
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'))