Keras LSTM-用于时间序列预测的输入形状

时间:2019-08-06 09:45:10

标签: python tensorflow keras deep-learning lstm

我正在尝试预测函数的输出。 (最终将是多输入多输出),但现在为了正确理解机制,我试图预测sin函数的输出。我的数据集如下,

    t0          t1
0   0.000000    0.125333
1   0.125333    0.248690
2   0.248690    0.368125
3   0.368125    0.481754
4   0.481754    0.587785
5   0.587785    0.684547
6   0.684547    0.770513
7   0.770513    0.844328
8   0.844328    0.904827
9   0.904827    0.951057
.....

总共100个值。 t0是当前输入t1是我要预测的下一个输出。然后通过scikit将数据分为训练/测试,

x_train, x_test, y_train, y_test = train_test_split(wave["t0"].values, wave["t1"].values, test_size=0.20)

问题恰好发生,我收到一条错误消息,提示输入错误的尺寸。

model = Sequential()
model.add(LSTM(128, input_shape=??? ,stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(x_train, y_train, 
          batch_size=10, epochs=100,
          validation_data=(x_test, y_test))

我在网站上尝试了其他问题来解决该问题,但是无论我如何尝试,我都无法使keras识别正确的输入。

1 个答案:

答案 0 :(得分:0)

LSTM期望输入数据的形状(batch_size,time_steps,num_features)。在正弦波预测中,num_features为1,time_steps是LSTM用于预测的先前时间点。在下面的示例中,批处理大小为1,time_steps为2,num_features为1。

x_train = np.ones((1,2,1)) 
y_train = np.ones((1,1))

x_test = np.ones((1,2,1))
y_test = np.ones((1,1))

model = Sequential()
model.add(LSTM(128, input_shape=(2,1)))
#for stateful
#model.add(LSTM(128, batch_input_shape=(1,2,1), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(x_train, y_train,
          batch_size=1, epochs=100,
          validation_data=(x_test, y_test))