TensorFlow LSTM Iterator для очереди тестов увеличивается во время обучения - PullRequest
3 голосов
/ 06 марта 2019

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

Структура выглядит следующим образом:

# Queue for Trainingdata
iter_train = tf.data.Dataset.range(epochNum_train).repeat().make_one_shot_iterator().get_next()

input_train_queue = input_train[:, iter_train * num_steps : (iter_train + 1) * num_steps, :]
input_train_queue.set_shape([batch_size, num_steps, input_size])

output_train_queue = output_train[:, iter_train * num_steps: (iter_train + 1) * num_steps, :]
output_train_queue.set_shape([batch_size, num_steps, input_size])

# Queue for Testdata
iter_test = tf.data.Dataset.range(epochNum_test).repeat().make_one_shot_iterator().get_next()

input_test_queue = input_test[:, iter_test * num_steps : (iter_test + 1) * num_steps, :]
input_test_queue.set_shape([batch_size, num_steps, input_size])

output_test_queue = output_test[:, iter_test * num_steps: (iter_test + 1) * num_steps, :]
output_test_queue.set_shape([batch_size, num_steps, input_size])   

# tf.cond for the selection of data
rnn_outputs, _ = tf.nn.dynamic_rnn(cell, tf.cond(useTestData, lambda: input_test_queue, lambda: input_train_queue),
                                      dtype=tf.float32, initial_state=init_state)
error = tf.reduce_mean(tf.squared_difference(rnn_outputs, tf.cond(useTestData, lambda: output_test_queue, lambda: output_train_queue)))
train_fn = tf.train.AdamOptimizer(learning_rate=0.01).minimize(error)

Моя проблема в том, что iter_test также увеличивается, когда данные обучения передаются в LSTM:

t1 = sess.run(iter_test) # t1 has the value 0 
sess.run(train_fn, {useTestData: False})
t2 = sess.run(iter_test) # t2 has the value 2 
t3 = sess.run(iter_test) # t3 has the value 3 

Почему iter_test увеличивается во время тренировки? И есть ли решение проблемы, чтобы iter_test не менялся во время тренировки?

...