我正在尝试预测函数的输出。 (最终将是多输入多输出),但现在为了正确理解机制,我试图预测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识别正确的输入。
答案 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))