Тензорный поток, полностью связанный поток управления за n-эпохную сводку
Когда я не использую очереди, мне нравится подсчитывать потери, точность, ppv и т. Д. В эпоху обучения и отправлять это tf.summary в конце каждой эпохи.
Я не уверен, как повторить это поведение с очередями. Есть ли сигнал, который я могу слушать, когда эпоха завершена?
(версия 0.9)
Типичная установка выглядит следующим образом:
queue=tf.string_input_producer(num_epochs=7)
... # построить граф #...
#training
try:
while not coord.should_stop():
sess.run(train_op)
except:
#file has been read num_epoch times
#do some stuff.. maybe summaries
coord.request_stop()
finally:
coord.join(threads)
Итак, ясно, что я мог бы просто установить num_epoch=1 и создать резюме в блоке кроме. Это потребовало бы запуска всей моей программы один раз за эпоху, и почему-то это не кажется самым эффективным.
1 ответ
ИЗМЕНИТЬ Изменено для учета правок в вопросе.
Эпоха - это не то, что является встроенным или "известным" для TensorFlow. Вы должны следить за эпохами в цикле обучения и запускать итоговые операции в конце эпохи. Должен работать псевдокод, подобный следующему:
num_mini_batches_in_epoch = ... # something like examples_in_file / mini_batch_size
try:
while True:
for i in num_mini_batches_in_epoch:
if coord.should_stop(): raise Exception()
sess.run(train_op)
sess.run([loss_summary, accuracy_summary])
except:
#file has been read num_epoch times
#do some stuff.. maybe summaries
coord.request_stop()
finally:
coord.join(threads)