我是Keras的新手,我正在尝试实现Sequence to Sequence LSTM。 特别是,我有一个具有9个特征的数据集,并且我想预测5个连续值。
我将训练和测试集分开,它们的形状分别是:
X TRAIN (59010, 9)
X TEST (25291, 9)
Y TRAIN (59010, 5)
Y TEST (25291, 5)
目前LSTM非常简单:
model = Sequential()
model.add(LSTM(100, input_shape=(9,), return_sequences=True))
model.compile(loss="mean_absolute_error", optimizer="adam", metrics= ['accuracy'])
history = model.fit(X_train,y_train,epochs=100, validation_data=(X_test,y_test))
但是我有以下错误:
ValueError:输入0与lstm_1层不兼容:预期 ndim = 3,找到的ndim = 2
有人可以帮助我吗?
答案 0 :(得分:2)
LSTM层期望输入的形状为(batch_size, timesteps, input_dim)
。在keras中,您需要传递(timesteps, input_dim
)作为input_shape参数。但是您正在设置input_shape(9,)。此形状不包括时间步长维度。可以通过为时间维度的input_shape添加额外的维度来解决该问题。例如,将额外的维度添加为值1可能是简单的解决方案。为此,您必须重塑输入数据集(X训练)和Y形状。但这可能会出现问题,因为时间分辨率为1,并且您输入的是单个值而不是值序列
x_train = x_train.reshape(-1, 1, 9)
x_test = x_test.reshape(-1, 1, 9)
y_train = y_train.reshape(-1, 1, 5)
y_test = y_test.reshape(-1, 1, 5)
model = Sequential()
model.add(LSTM(100, input_shape=(1, 9), return_sequences=True))
model.add(LSTM(5, input_shape=(1, 9), return_sequences=True))
model.compile(loss="mean_absolute_error", optimizer="adam", metrics= ['accuracy'])
history = model.fit(X_train,y_train,epochs=100, validation_data=(X_test,y_test))