Tensorflow 使用LSTM模型对试验和列车数据的Keras2进行预测时存在形状问题

Tensorflow 使用LSTM模型对试验和列车数据的Keras2进行预测时存在形状问题,tensorflow,keras,time-series,lstm,reshape,Tensorflow,Keras,Time Series,Lstm,Reshape,问题: 当我在test_X和train_X上运行model.predict()时,当我试图学习如何使用n个时间步进行回溯来预测未来的一个步骤时,我会发现形状不匹配 我正在使用的内容: Windows10, 蟒蛇3.8, Keras 2.3.1, 康达文夫酒店 我试过: 使用中的示例从训练和测试数据创建监督训练集。 我在这里和MachineLearningMastery中尝试了很多例子,最后一个例子结束了。我想我可能在过去两天的某个地方读到了正确的答案,但现在信息太多了,不完全确定下一步会是什么

问题:
当我在
test_X
train_X
上运行
model.predict()
时,当我试图学习如何使用n个时间步进行回溯来预测未来的一个步骤时,我会发现形状不匹配

我正在使用的内容:
Windows10, 蟒蛇3.8, Keras 2.3.1, 康达文夫酒店

我试过:
使用中的示例从训练和测试数据创建监督训练集。 我在这里和MachineLearningMastery中尝试了很多例子,最后一个例子结束了。我想我可能在过去两天的某个地方读到了正确的答案,但现在信息太多了,不完全确定下一步会是什么

# define model 
model = Sequential() 
model.add(LSTM(50, activation= 'relu' , input_shape=(train_X.shape[1], train_X.shape[2]))) 
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
callback = [EarlyStopping(monitor="loss", min_delta = 0.00001, patience = 20, mode = 'auto', restore_best_weights=True)]

# fit model
history = model.fit(train_X, train_y, epochs=100, validation_data=(test_X, test_y), verbose=1, 
                    batch_size=16, shuffle=False, callbacks=callback)
这些曲线图表明,损失和瓦卢损失是好的,没有什么不寻常的

以下是我预测前的数据形状

print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
(25607, 60, 3) (25607,) (6360, 60, 3) (6360,)

你好,我不明白你为什么要做
trainPredict=scaler.inverse\u transform(trainPredict)
。此外,您的错误来自于
trainPredict=scaler.inverse_transform(trainPredict)
而不是
model.predict()
刚刚在这里看到一篇文章,他们将倒数从(400,)改为(400,1),这有助于他的事业,但在这里没有。在最初的错误中,它有一个箭头<代码>--->5 trainPredict=scaler.inverse_transform(trainPredict)所以我认为问题可能就在那里
# make predictions
trainPredict = model.predict(train_X)
testPredict = model.predict(test_X)
# invert predictions
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform(train_y)
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform(test_y)
# calculate root mean squared error
trainScore = math.sqrt(mean_squared_error(train_y[:,0], trainPredict[:,0]))
print('Train Score: %.2f RMSE' % (trainScore))
testScore = math.sqrt(mean_squared_error(test_y[:,0], testPredict[:,0]))
print('Test Score: %.2f RMSE' % (testScore))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-128-11d08dc2a08f> in <module>
      3 testPredict = model.predict(test_X)
      4 # invert predictions
----> 5 trainPredict = scaler.inverse_transform(trainPredict)
      6 trainY = scaler.inverse_transform(train_y)
      7 testPredict = scaler.inverse_transform(testPredict)

c:\users\user\miniconda3\lib\site-packages\sklearn\preprocessing\_data.py in inverse_transform(self, X)
    434                         force_all_finite="allow-nan")
    435 
--> 436         X -= self.min_
    437         X /= self.scale_
    438         return X

ValueError: non-broadcastable output operand with shape (25607,1) doesn't match the broadcast shape (25607,4)
trainPredict = scaler.inverse_transform(trainPredict.reshape(-1,1))
trainY = scaler.inverse_transform(train_y)
testPredict = scaler.inverse_transform(testPredict.reshape(-1,1))
testY = scaler.inverse_transform(test_y)