【发布时间】:2020-01-10 10:24:47
【问题描述】:
我正在使用 ConvLSTM 进行时间步长 = 4 的时间序列预测(单变量序列)。数据框有两列,即。时间戳和金额。数量列包含连续值,然后我们将数据框分为训练和测试。训练数据有 12777 个观察值,测试有 3181 个观察值。代码如下:
from numpy import array
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers import ConvLSTM2D
# data prep
def split_sequence(sequence, n_steps):
X, y = list(), list()
for i in range(len(sequence)):
end_ix = i + n_steps
if end_ix > len(sequence)-1:
break
seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
X.append(seq_x)
y.append(seq_y)
return array(X), array(y)
raw_seq = train['amount'].values
n_steps = 4
# split into samples
X, y = split_sequence(raw_seq, n_steps)
# reshape from [samples, timesteps] into [samples, timesteps, rows, columns, features]
n_features = 1
n_seq = 2
n_steps = 2
X = X.reshape((X.shape[0], n_seq, 1, n_steps, n_features))
# define model
model = Sequential()
model.add(ConvLSTM2D(filters=64, kernel_size=(1,2), activation='relu', input_shape=(n_seq, 1, n_steps, n_features)))
model.add(Flatten())
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=500, verbose=0)
#prediction
raw_seq2 = test['amount'].values
X_input, y_input = split_sequence(raw_seq2, n_steps)
X_input = X_input.reshape((X_input.shape[0], n_seq, 1, n_steps, n_features))
yhat = model.predict(X_input, verbose=0)
mean_absolute_error(y_input, yhat)
但是在执行以下操作时:
X_input = X_input.reshape((X_input.shape[0], n_seq,1, n_steps, n_features))
我收到此错误:
ValueError: cannot reshape array of size 6358 into shape (3179,2,2,1)
知道如何解决这个问题吗?
【问题讨论】:
标签: python numpy keras conv-neural-network lstm