预期的ndim=3,找到的ndim=2

2024-04-23 15:58:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Keras的新手,我正在尝试实现一个序列到序列的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: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=2

有人能帮我吗?


Tags: 数据testaddmodeltrain序列特征keras
1条回答
网友
1楼 · 发布于 2024-04-23 15:58:51

LSTM层希望输入的形状为(batch_size, timesteps, input_dim)。在keras中,需要为输入形状参数传递(timesteps, input_dim)。但您正在设置输入形状(9,)。此形状不包括timesteps维度。该问题可以通过在时间维的输入图形中添加额外的维数来解决。E、 g加上值为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))

相关问题 更多 >