Я пытаюсь построить RNN. Я пытаюсь предсказать Y с помощью нескольких значений X. Если X — это только ряд данных, состоящий из старых Y, результаты выглядят нормально. Но если я использую дополнительную информацию о данных (дополнительные разные крестики), я получаю странные результаты. Y всего 1 или -1, но я получаю следующие прогнозы даже для набора поездов? Возможно ли это или должна быть ошибка в коде? Данные нормализуются перед использованием.
Я использую 9 входов (один старый Ys) и 1 выход.
n_inputs = 9
n_neurons = 100
n_outputs = 1
n_layers = 4
learning_rate = 0.0001
batch_size = 50
n_epochs = 100
train_set_size = x_train.shape[0]
test_set_size = x_test.shape[0]
tf.reset_default_graph()
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.float32, [None, n_outputs])
# LSTM
layers = [tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons, activation=tf.nn.elu)
for layer in range(n_layers)]
multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)
rnn_outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)
stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons])
stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)
outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])
outputs = outputs[:,n_steps-1,:] # keep only last output of sequence
# Cost function
loss = tf.reduce_mean(tf.square(outputs - y))
#optimizer to CHANGE IX:
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(loss)
# Fitting the model
graph = tf.get_default_graph()
input_graph_def = graph.as_graph_def()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for iteration in range(int(n_epochs*train_set_size/batch_size)):
x_batch, y_batch = get_next_batch(batch_size) # fetch the next training batch
sess.run(training_op, feed_dict = {X: x_batch, y: y_batch})
if iteration % int(5*train_set_size/batch_size) == 0:
mse_train = loss.eval(feed_dict = {X: x_train, y: y_train})
mse_valid = loss.eval(feed_dict = {X: x_valid, y: y_valid})
print('%.2f epochs: MSE train/valid = %.6f/%.6f'%(
iteration*batch_size/train_set_size, mse_train, mse_valid))
вы можете поделиться кодом, если хотите, чтобы мы нашли проблему. (все, что вы считаете важным)
спасибо, ребята, я добавлю немного информации и кода в вопрос
любой дополнительный ввод?






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