Как отформатировать входные данные временных рядов для подачи в модель Encoder и Decoder для прогнозирования временных рядов - PullRequest
0 голосов
/ 21 октября 2019

Я использую модель Encoder и Decoder LSTM для прогнозирования ежедневных и ежемесячных данных временных рядов, и я застрял с форматированием формы входных данных для модели кодера и декодера.

Я создал последовательность look_back сэто данные временного ряда для прогнозирования, которые были преобразованы в 3 измерения для подачи в модель кодера и декодера. Когда я тренирую модель, она выдает ошибку

look_back = 3
train_X, train_y = prepare_seq2seq_data(train_scaled , look_back)
test_X, test_y = prepare_seq2seq_data(test_scaled , look_back)

print('train_X',train_X.shape, 'train_y',train_y.shape)
print('test_X', test_X.shape, 'test_y',test_y.shape)



train_X = train_X.reshape(train_X.shape[0], train_X.shape[1], 1)
test_X = test_X.reshape(test_X.shape[0], test_X.shape[1], 1)

train_X (15029, 3, 1) train_y (15029,)
test_X (1667, 3, 1) test_y (1667,)

Я получаю следующую ошибку

ValueError: Ошибка при проверке ввода модели: список массивов Numpy, которые вы передаетемодель не соответствует размеру, который ожидала модель. Ожидается, что он увидит 2 массива (ов), но вместо этого получил следующий список из 1 массива:

Я изменил на 2D и даже преобразовал в массив numpy, и все равно он выдает ту же ошибку.

train_y = train_y.reshape((train_y.shape[0], 1))
test_y = test_y.reshape((test_y.shape[0], 1))
print('train_y',train_y.shape)

encoder_inputs = Input(shape=(look_back, 1))
encoder = LSTM(latent_dim, dropout=dropout, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)

encoder_states = [state_h, state_c]

decoder_inputs = Input(shape=(look_back, 1))
#decoder_inputs = tf.keras.layers.Input(shape=(None, 1))

decoder_lstm = LSTM(latent_dim, dropout=dropout, return_sequences=True, 
return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs,
                                 initial_state=encoder_states)

decoder_dense = Dense(1) # 1 continuous output at each timestep
decoder_outputs = decoder_dense(decoder_outputs)

model = tf.keras.models.Model([encoder_inputs, decoder_inputs], 
decoder_outputs)
...