tensorflow在队列训练时进行评估?

时间:2016-12-19 07:45:56

标签: python queue tensorflow

我将我的数据预处理为tfrecord。我通过排队 而不是feed_dict来提供数据。

这是我的代码。

for i in range(100000000):
    sess.run(train_op)
    start_time = time.time()
    if i > 20 and i % 10 == 0:
        summaries_train = sess.run(Summaries)
        writer_train.add_summary(summaries_train, i)
        print("%dth batch took %fs, have scanned %d of %d" % (i, time.time()-start_time, i*cf.batch_size, all))
        print("loss: {0}, acc: {1}".format(sess.run(Loss), sess.run(Acc)))

我的问题是:我如何在训练时评估?

使用队列时,我不必编写feed_dict。那么如何将评估数据提供给张量流?

3 个答案:

答案 0 :(得分:1)

您可以执行eval_in_batches函数here之类的操作,但可以从队列而不是feed_dict获取数据。请注意,您将需要一个单独的队列,以便您的评估不会从培训中获取示例。

培训时要评估的另一种常见模式是启动一个单独的仅CPU过程,该过程加载检查点并持续运行评估。

答案 1 :(得分:0)

您可以将评估与培训分开,甚至可以在完全不同的机器/流程上运行。在训练机器上(只有训练数据),您可以定期将模型保存到磁盘上。

您的评估机器会检查模型中的文件夹,一旦出现新模型,它就会加载它并运行评估。

答案 2 :(得分:0)

所有操作均与培训过程相同,不同之处在于:1)分开培训数据和评估数据; 2)不要运行优化操作,也就是梯度下降。希望this function对您有所帮助。