Тензорный поток, полностью связанный поток управления за 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)
Другие вопросы по тегам