[英]Stuck with input/output shapes in keras, lstm
我正在尝试使用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)
我不确定为什么会这样,但是我认为我的造型没有正确。
在数据中,序列的每个时间步都有标签。 您当前的网络设置为整个序列只有一个标签。
要获得每个时间步的输出,您需要在LSTM中添加return_sequences=True
并将Dense
层包装在TimeDistributed
层中,以便将其应用于每个时间步。
model = Sequential()
model.add(LSTM(4, input_shape=(sampleSize, 4), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.