如何以适当的形式向Python中的LSTM预测模型输入数据?

2024-04-25 06:16:17 发布

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

我想将时间序列数据输入LSTM预测模型。 在我的例子中,输入数据的起始长度是(53,2),输出数据的长度是(53,)

因为我想设计多对一LSTM预测模型, 我想输入两个特性。但是当我执行这个代码时,它有错误

训练结果恰到好处

Epoch 1/50 
WARNING:tensorflow:Model was constructed with shape (None, 3, 2) for input KerasTensor(type_spec=TensorSpec(shape=(None, 3, 2), dtype=tf.float32, name='lstm_1_input'), name='lstm_1_input', description="created by layer 'lstm_1_input'"), but it was called on an input with incompatible shape (None, 1, 2). 
WARNING:tensorflow:Model was constructed with shape (None, 3, 2) for input KerasTensor(type_spec=TensorSpec(shape=(None, 3, 2), dtype=tf.float32, name='lstm_1_input'), name='lstm_1_input', description="created by layer 'lstm_1_input'"), but it was called on an input with incompatible shape (None, 1, 2).
WARNING:tensorflow:Model was constructed with shape (None, 3, 2) for input KerasTensor(type_spec=TensorSpec(shape=(None, 3, 2), dtype=tf.float32, name='lstm_1_input'), name='lstm_1_input', description="created by layer 'lstm_1_input'"), but it was called on an input with incompatible shape (None, 1, 2).
2/2 - 1s - loss: nan - val_loss: nan
Epoch 2/50 ...

它似乎在输入到LSTM的数据的形状上有问题。 我怎样才能解决这个问题?当我看到这个问题时,我尝试重新排列数据集。也就是说,将重塑代码X=np.array(X).reshape(53,1,2)的编号更改为X=np.array(X).reshape(53,2,1)

下面编写的代码是我代码的一部分

X = np.array(X).reshape(53, 1, 2)
y = y.reshape(53,1,1)


X_train, X_test, y_train, y_test = X[:42], X[43:53], y[:42], y[43:53] 
X_train_valid, y_train_valid = X[33:42], y[33:42]


X_train = X_train.reshape(42,1,2)
y_train = y_train.reshape(42,1,1)


X_train_valid = X_train_valid.reshape(9,1,2)
y_train_valid = y_train_valid.reshape(9,1,1)

X_test = X_test.reshape(10,1,2)
y_test = y_test.reshape(10,1,1)

model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(3,2)))
model.add(Dense(1))
model.summary()
model.compile(optimizer='adam', loss='mse')

history = model.fit(X_train, y_train, epochs = 50, verbose = 2, validation_data = (X_train_valid, y_train_valid))


Tags: 数据代码nametestnoneinputmodelwith