【发布时间】:2018-06-30 17:35:41
【问题描述】:
我正在尝试使用 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)
我不确定为什么会发生这种情况,但我认为我没有正确重塑。
【问题讨论】:
-
为什么trainX有3维。你为什么要把trainY改成
.reshape(1, len(trainY))? -
因为 lstm 需要 3d 形状数组(样本、时间步长、特征)。并且对于输出形状应该有相同的样本数
-
在这种情况下,为什么要在代码中保留 1 代替样本,而
sampleSize代替时间步长 -
我在关注这个帖子machinelearningmastery.com/…
标签: python machine-learning keras artificial-intelligence lstm