Прогноз seq2seq для временных рядов - PullRequest
0 голосов
/ 10 июня 2018

Я хочу сделать модель Seq2Seq для целей реконструкции.Я хочу, чтобы модель обучалась восстанавливать нормальные временные ряды, и предполагается, что такая модель будет плохо работать для восстановления аномальных временных рядов, не увидев их во время обучения.

У меня есть некоторые пробелы в моем коде, а также в понимании.Я взял это как ориентацию и до сих пор делал: traindata: input_data.shape (1000, 60, 1) и target_data.shape (1000, 50, 1) с целевыми данными, являющимися теми же обучающими данными только в обратном порядке, что и sugested вбумага здесь .для вывода: я хочу предсказать данные другого временного ряда с обученной моделью, имеющей форму (3000,60,1).T Теперь открыто 2 пункта: как мне указать входные данные для моей модели обучения и как построить выводную часть с условием остановки?Пожалуйста, исправьте любые ошибки.

from keras.models import Model
from keras.layers import Input
from keras.layers import LSTM
from keras.layers import Dense

num_encoder_tokens = 1#number of features
num_decoder_tokens = 1#number of features
encoder_seq_length = None
decoder_seq_length = None
batch_size = 50
epochs = 40

# same data for training 
input_seqs=()#shape (1000,60,1) with sliding windows
target_seqs=()#shape(1000,60,1) with sliding windows but reversed
x= #what has x to be ?

#data for inference 
# how do I specify the input data for my other time series ?

# Define training model
encoder_inputs = Input(shape=(encoder_seq_length,
                          num_encoder_tokens))
encoder = LSTM(128, return_state=True, return_sequences=True)
encoder_outputs = encoder(encoder_inputs)
_, encoder_states = encoder_outputs[0], encoder_outputs[1:]

decoder_inputs = Input(shape=(decoder_seq_length,
                          num_decoder_tokens))
decoder = LSTM(128, return_sequences=True)
decoder_outputs = decoder(decoder_inputs, initial_state=encoder_states)
decoder_outputs = TimeDistributed(
Dense(num_decoder_tokens, activation='tanh'))(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

# Training
model.compile(optimizer='adam', loss='mse')
model.fit([input_seqs,x], target_seqs,
      batch_size=batch_size, epochs=epochs)


# Define sampling models for inference
encoder_model = Model(encoder_inputs, encoder_states)

decoder_state_input_h = Input(shape=(100,))
decoder_state_input_c = Input(shape=(100,))
decoder_states = [decoder_state_input_h, decoder_state_input_c]
decoder_outputs = decoder(decoder_inputs,
                      initial_state=decoder_states)
decoder_model = Model([decoder_inputs] + decoder_states,
decoder_outputs)

# Sampling loop for a batch of sequences
states_values = encoder_model.predict(input_seqs)
stop_condition = False
while not stop_condition:
    output_tokens = decoder_model.predict([target_seqs] + states_values)
#what else do I need to include here ? 
    break

Ответы [ 3 ]

0 голосов
/ 14 июня 2018

Во время обучения мы предоставляем данные в один прием.Я думаю, вы понимаете эту часть.

Но во время вывода мы не можем так поступить.Мы должны давать данные на каждом шаге по времени, а затем возвращать состояния ячеек, скрытые состояния, и цикл должен продолжаться до тех пор, пока не будет сгенерировано последнее слово

0 голосов
/ 14 июня 2018

def predict_sequence(infenc, infdec, source, n_steps, cardinality):
    # encode
    state = infenc.predict(source)
    # start of sequence input
    target_seq = array([0.0 for _ in range(cardinality)]).reshape(1, 1, cardinality)
    # collect predictions
    output = list()
    for t in range(n_steps):
        # predict next char
        yhat, h, c = infdec.predict([target_seq] + state)
        # store prediction
        output.append(yhat[0,0,:])
        # update state
        state = [h, c]
        # update target sequence
        target_seq = yhat
    return array(output)

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

0 голосов
/ 11 июня 2018

Вы можете обратиться к блогу и узнать, как это делается во время вывода.

https://machinelearningmastery.com/develop-encoder-decoder-model-sequence-sequence-prediction-keras/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...