Я не уверен, как передать данные в LSTM, где у меня есть 6 столбцов с отношением. Я использовал модель, рассчитанную на один вход, и попытался изменить размеры. Сначала я добавил
nsamples, nx, ny = X_train.shape
X_train = X_train.reshape((nsamples,nx*ny))
Чтобы убедиться, что MixMaxScaler
принимает данные в двух измерениях. Модель использовала три измерения для LSTM (последний был 1
), поэтому я изменил его до 6
и скормил его модели. Но выдает ошибку: Error when checking target: expected dense to have 2 dimensions, but got array with shape (69692, 42, 6)
Итак, я добавил flatten
слой. Это не помогает ... Что я делаю не так? Btw. 7 означает прогноз на 7 дней. Мои данные выглядят так:
А вот код
data_test = (data.loc['2014-01-01':,:])
data_train = data.loc[:'2013-12-31', :]
data_train = np.array(data_train)
X_train, y_train = [], []
for i in range(7, len(data_train)-7):
X_train.append(data_train[i-7:i])
y_train.append(data_train[i:i+7])
X_train, y_train = np.array(X_train), np.array(y_train)
nsamples, nx, ny = X_train.shape
X_train = X_train.reshape((nsamples,nx*ny))
nsamples, nx, ny = y_train.shape
y_train = y_train.reshape((nsamples,nx*ny))
x_scaler = MinMaxScaler()
X_train = x_scaler.fit_transform(X_train)
y_scaler = MinMaxScaler()
y_train = y_scaler.fit_transform(y_train)
print(X_train, y_train)
# >>>69692, 42 / 69692, 42
X_train = X_train.reshape(69692, 7, 6)
y_train = y_train.reshape(69692, 7, 6)
reg = Sequential()
reg.add(LSTM(units = 200, activation = 'relu', input_shape=(7,6)))
reg.Flatten()
reg.add(Dense(7))
reg.compile(loss='mse', optimizer='adam')
reg.fit(X_train, y_train, epochs = 100)
X_test, y_test = [], []
data_test = np.array(data_test)
for i in range(7, len(data_test)-7):
X_test.append(data_test[i-7:i])
y_test.append(data_test[i:i+7])
X_test, y_test = np.array(X_test), np.array(y_test)
nsamples, nx, ny = X_test.shape
X_test = X_test.reshape((nsamples,nx*ny))
nsamples, nx, ny = y_test.shape
y_test = y_test.reshape((nsamples,nx*ny))
X_test = x_scaler.transform(X_test)
y_test = y_scaler.transform(y_test)
print(X_test.shape, y_test.shape)
# >>> 12189, 42 / 12189, 42
X_test = X_test.reshape(12189,7,6)
y_pred = reg.predict(X_test)