Python 卡在keras、lstm中的输入/输出形状

Python 卡在keras、lstm中的输入/输出形状,python,machine-learning,keras,artificial-intelligence,lstm,Python,Machine Learning,Keras,Artificial Intelligence,Lstm,我正在尝试使用lstm来训练能量需求的时间序列。我使用了时间戳并得到了结果,但对于这个实验,我试图将日期时间分为天、月、年、小时。所以在分割数据之后,我的csv文件如下所示 timestamp | day | month | year | hour | demand 01-07-15 1:00 | 1 | 7 | 2015 | 1 | 431607 我将keras用于LSTM(我对它非常陌生)。到目前为止,我已经编写了以下代码 from pandas import r

我正在尝试使用lstm来训练能量需求的时间序列。我使用了时间戳并得到了结果,但对于这个实验,我试图将日期时间分为天、月、年、小时。所以在分割数据之后,我的csv文件如下所示

timestamp     | day | month | year | hour | demand
01-07-15 1:00 |  1  |   7   | 2015 |   1  | 431607
我将keras用于LSTM(我对它非常陌生)。到目前为止,我已经编写了以下代码

from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error

dataframe = read_csv('patched_data_sorted.csv', engine='python')
dataset = dataframe.values
trainX = dataset[:, 1:5]
sampleSize = len(trainX)
trainX = trainX.reshape(1, len(trainX), 4)
trainY = dataset[:, 5]
trainY = trainY.reshape(1, len(trainY))
print(trainY)

# print(trainX)

model = Sequential()
model.add(LSTM(4, input_shape=(sampleSize, 4)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
trainPredict = model.predict(trainX)
print(trainPredict)
但我得到了这个错误

ValueError: Error when checking target: expected dense_1 to have shape (None, 1) but got array with shape (1, 20544)

我不知道为什么会发生这种情况,但我认为我没有正确地进行重塑。

在您的数据中,序列的每个时间步都有一个标签。当前网络设置为整个序列只有一个标签

要获得每个时间步的输出,您需要将
return_sequences=True
添加到LSTM中,并将
densite
层包装在
TimeDistributed
层中,以便在每个时间步中应用它

model = Sequential()
model.add(LSTM(4, input_shape=(sampleSize, 4), return_sequences=True))
model.add(TimeDistributed(Dense(1)))

为什么trainX有3个维度。为什么要将trany重塑为
。重塑(1,len(trany))
?因为lstm需要三维形状阵列(样本、时间步长、特征)。对于输出形状应该有相同数量的样本在这种情况下,为什么要保留1来代替样本和
sampleSize
在代码中的时间步长的plce中呢