我将我的数据预处理为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。那么如何将评估数据提供给张量流?
答案 0 :(得分:1)
您可以执行eval_in_batches
函数here之类的操作,但可以从队列而不是feed_dict
获取数据。请注意,您将需要一个单独的队列,以便您的评估不会从培训中获取示例。
培训时要评估的另一种常见模式是启动一个单独的仅CPU过程,该过程加载检查点并持续运行评估。
答案 1 :(得分:0)
您可以将评估与培训分开,甚至可以在完全不同的机器/流程上运行。在训练机器上(只有训练数据),您可以定期将模型保存到磁盘上。
您的评估机器会检查模型中的文件夹,一旦出现新模型,它就会加载它并运行评估。
答案 2 :(得分:0)
所有操作均与培训过程相同,不同之处在于:1)分开培训数据和评估数据; 2)不要运行优化操作,也就是梯度下降。希望this function对您有所帮助。