Как использовать свертку 1D с lstm? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть значение 72 для ввода данных временного ряда по отдельным последним 6 значениям для предсказания теста. Я хочу использовать CONV1D с LSTM.

Это мой код.

df = pd.read_csv('D://data.csv',
             engine='python')

df['DATE_'] = pd.to_datetime(df['DATE_']) + MonthEnd(1)
df = df.set_index('DATE_')
df.head()

split_date = pd.Timestamp('03-01-2015')

train = df.loc[:split_date, ['COLUMN3DATA']]
test = df.loc[split_date:, ['COLUMN3DATA']]

sc = MinMaxScaler()

train_sc = sc.fit_transform(train)
test_sc = sc.transform(test)

X_train = train_sc[:-1]
y_train = train_sc[1:]

X_test = test_sc[:-1]
y_test = test_sc[1:]

###################  Convolution  #######################

X_train_t = X_train[None,:]
print(X_train_t.shape)
X_test_t = X_test[:, None]

K.clear_session()
model = Sequential()

model.add(Conv1D(6, 3, activation='relu', input_shape=(12,1)))
model.add(LSTM(6, input_shape=(1,3), return_sequences=True))
model.add(LSTM(3))
model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam' )

model.summary()

model.fit(X_train_t, y_train, epochs=400, batch_size=10, verbose=1)

y_pred = model.predict(X_test_t)

Когда я запускаю, выдает ошибку вроде этого

ValueError: Error when checking input: expected conv1d_1_input to have shape (None, 12, 1) but got array with shape (1, 64, 1)

Как использовать conv1D с lstm

1 Ответ

0 голосов
/ 09 мая 2018

Проблема между вашими входными данными и вашей формой ввода.

  • Вы сказали в модели, что ваша форма ввода (12,1) (= batch_shape=(None,12,1))
  • Но ваши данные X_train_t имеют форму (1,64,1).

Либо вы фиксируете входную форму модели, либо вы фиксируете свои данные, если это не ожидаемая форма.

Для переменных длин / временных интервалов вы можете использовать input_shape=(None,1).

Вам не нужно input_shape во втором слое.

...