В тензорном потоке: как изменить форму выхода РНН - PullRequest
0 голосов
/ 28 июня 2019

Я хочу спрогнозировать набор из 6 временных рядов, используя RNN в тензорном потоке. Я хочу, чтобы входная длина составляла 12 наблюдений (для каждого временного ряда), а выходная длина была 18 (для каждого временного ряда). Я не могу заставить его работать. Код ниже работает, если горизонт прогноза установлен равным длине ввода. Спасибо!

f_horizon = 18 # Forecast horizon
num_periods = 12 # Input length 

X = tf.placeholder(tf.float32, [None, num_periods, 6])
Y = tf.placeholder(tf.float32, [None, f_horizon, 6])

layers = [tf.nn.rnn_cell.LSTMCell(num_units=hi, activation=tf.nn.relu) for hi in hidden] 
drops = [tf.contrib.rnn.DropoutWrapper(layer, output_keep_prob=dropout_prop) for layer in layers]
drops.append(tf.nn.rnn_cell.LSTMCell(num_units=f_horizon, activation=tf.nn.relu))
multi_layer_cell = tf.contrib.rnn.MultiRNNCell(drops)

rnn_output, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)
stacked_rnn_output = tf.reshape(rnn_output, [-1, f_horizon])
stacked_outputs = tf.layers.dense(stacked_rnn_output, 6)

outputs = tf.reshape(stacked_outputs, [-1, f_horizon, 6]) 

loss = tf.reduce_mean(tf.square(outputs - Y))
...