#python #tensorflow #queue #lstm #recurrent-neural-network
#python #tensorflow #очередь #lstm #рекуррентная нейронная сеть
Вопрос:
У меня есть 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
не менялось во время обучения?