Последовательность временных рядов Keras к последовательности не подходит и сдвигается - PullRequest
0 голосов
/ 16 декабря 2018

Я основал свой код на этой ссылке: https://weiminwang.blog/2017/09/29/multivariate-time-series-forecast-using-seq2seq-in-tensorflow/#multivariate ссылка.

Вот мой репо с отредактированной записной книжкой: https://github.com/itisyeetimetoday/Seq_to_Seq

Вот мои данные: https://docs.google.com/spreadsheets/d/1B-Z_qjTPX_LppHh0Bv4WWD0KWB3X5RZqQjE_vLKkw8w/edit?usp=sharing

Вот мой код:

from build_model_multi_variate import * 

## Parameters
learning_rate = 0.1
#0.005
lambda_l2_reg = 0.05
## 0.0017
## Network Parameters
# length of input signals
input_seq_len = 15 
# length of output signals
output_seq_len = 20 
# size of LSTM Cell
hidden_dim = 64
#64
# num of input signals
input_dim = 3 
# num of output signals
output_dim = 2 
# num of stacked lstm layers 
num_stacked_layers = 2
#2
# gradient clipping - to avoid gradient exploding
GRADIENT_CLIPPING = 4
#2.5

Полный build_model_multivariate.py здесь: https://github.com/aaxwaz/Multivariate-Time-Series-forecast-using-seq2seq-in-TensorFlow/blob/master/build_model_multi_variate.py

Я использую следующий код для обучения

total_iteractions = 1000
# 100, 200 is best so far, 1000
batch_size = 16
#16, 16 is the best so far
KEEP_RATE = 0.5
train_losses = []
val_losses = []

x = np.linspace(0, 40, 130)
train_data_x = x[:185]

rnn_model = build_graph(feed_previous=False)

saver = tf.train.Saver()

init = tf.global_variables_initializer()
with tf.Session() as sess:

    sess.run(init)

   print("Training losses: ")
    for i in range(total_iteractions):
        batch_input, batch_output = 
generate_train_samples(batch_size=batch_size)

        feed_dict = {rnn_model['enc_inp'][t]: batch_input[:,t] for t in 
range(input_seq_len)}
        feed_dict.update({rnn_model['target_seq'][t]: batch_output[:,t] for t in range(output_seq_len)})
    _, loss_t = sess.run([rnn_model['train_op'], rnn_model['loss']], feed_dict)
        print(loss_t)

    temp_saver = rnn_model['saver']()
    save_path = temp_saver.save(sess, os.path.join('./','multivariate_ts_model0'))

print("Checkpoint saved at: ", save_path)

Я загружаю код (полные вещи можно найти в моем репозитории на github). ЗатемЯ визуализирую прогнозы:

test_seq_input= 
np.array(generate_samples_for_input(train_data_x[-15:])).transpose(1,0)
test_seq_output = 
np.array(generate_samples_for_output(train_data_x[-20:])).transpose(1,0)

plt.title("Predicted and true output sequences")
#i1, i2, i3, = plt.plot(range(15), 
np.array(true_input_signals(x[95:110])).transpose(1, 0), 'c:', label = 'true input sequence')
 p1, p2 = plt.plot(range(15, 35), final_preds, 'ro', label = 'predicted outputs')
t1, t2 = plt.plot(range(15, 35), 
 np.array(true_output_signals(x[110:])).transpose(1, 0 ), 'co', label = 'true outputs')

print(final_preds)
print(np.array(true_output_signals(x[110:])).transpose(1, 0 ))

plt.legend(handles = [p1, t1], loc = 'upper left')
plt.show()

Но мое приспособление еще далеко.Я попытался увеличить шаги (приводит к некоторому изменению предсказания).Я попытался изменить все гиперпараметры.Вот картинки с предсказаниями введите описание изображения здесь

Что мне нужно изменить в моем коде?

...