Я использую 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)
Есть идеи, как решить эту проблему?