Как смоделировать данные для последовательности к прогнозированию последовательности только с одной функцией - PullRequest
0 голосов
/ 21 октября 2019

У меня 9000 последовательностей длиной 200, только одна особенность.

#data.shape= (9000,200,1)

Я хочу предсказать последовательность длины 200 на основе входной последовательности длины 190. X - входная последовательность длины 190, а Y - выходная последовательность длины 200.

X = np.delete(data,slice(50,60),1)  # shape of X = (9000,190,1)
Y = data.copy() # shape of Y = (9000,200,1)

Мой вопрос основан на учебном пособии Модель кодера-декодера для прогнозирования последовательности к последовательности

и существующем вопросе о потоке стека Прогноз seq2seq для временного ряда

# returns train, inference_encoder and inference_decoder models
def define_models(n_input, n_output, n_units):
    # define training encoder
    encoder_inputs = Input(shape=(None, n_input))
    ## First LSTM Layer (Encoder layer)
    encoder = LSTM(n_units, return_state=True)
    encoder_outputs, state_h, state_c = encoder(encoder_inputs)
    encoder_states = [state_h, state_c]

    # define training decoder
    decoder_inputs = Input(shape=(None, n_output))
    ## Second LSTM Layer (Decoder layer)
    decoder_lstm = LSTM(n_units, return_sequences=True, return_state=True) # Decoder returns sequence, while encoder do not
    decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states) # initial state of decoder is set to encoder states
    ## Dense Layer of decoder
    decoder_dense = Dense(n_output, activation='softmax') 
    decoder_outputs = decoder_dense(decoder_outputs)
    model = Model([encoder_inputs, decoder_inputs], decoder_outputs) # this is trained model containing both encoder and decoder

    # define inference encoder
    encoder_model = Model(encoder_inputs, encoder_states)

    # define inference decoder
    decoder_state_input_h = Input(shape=(n_units,))
    decoder_state_input_c = Input(shape=(n_units,))
    decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
    decoder_outputs, state_h, state_c = decoder_lstm(decoder_inputs, initial_state=decoder_states_inputs)
    decoder_states = [state_h, state_c]
    decoder_outputs = decoder_dense(decoder_outputs)
    decoder_model = Model([decoder_inputs] + decoder_states_inputs, [decoder_outputs] + decoder_states)
    # return all models
    return model, encoder_model, decoder_model

train, infenc, infdec = define_models(1, 1, 128)
train.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])

В авторе учебника подгоните модель, используя две входные последовательности, такие как

train.fit([X1, X2], y, epochs=1)

Мой вопрос: как мне подобрать мою задачу таким образом (Как создать массив X2 (Вектор контекста),когда у меня только одна особенность)? X2 - сдвинутая последовательность выходных данных в соответствии с руководством.

...