鉴于我训练模型;使用metagraph / save.Saver保存它,以及绘制到新脚本/流程以测试测试数据的负载,确保我只迭代测试数据一次的最佳方法是什么?
通过我的训练数据,我希望能够迭代整个数据集进行任意数量的迭代。我用
tf.train.string_input_producer()
驱动一个加载文件的队列进行训练,所以我可以安全地将num_epochs保留为默认值(= None)并让其他控件驱动训练终止。
但是,当我运行图表进行评估时,我只想评估测试集一次(并收集相应的统计信息)。
最初的尝试解决方案:
为Epochs制作一个张量,然后将其传递给tf.train.string_input_producer,然后根据test / train将其赋值给适当的值。
可是:
tf.train.string_input_producer只将整数作为num_epochs,所以这是不可能的......除非我遗漏了什么。
补充说明:我使用
tf.train.batch()
读入已经序列化到协议缓冲区(https://www.tensorflow.org/versions/r0.11/how_tos/reading_data/index.html#file-formats)的测试/训练数据,因此我对数据的加载方式以及加载数据的可见性了解最少。
tf.train.batch显然会抛出tf.errors.OutOfRangeError,但我不清楚如何成功捕获,或者这甚至是我真正想做的事情。我试过一个很天真的
try...except...finally
(例如在https://www.tensorflow.org/versions/r0.11/how_tos/reading_data/index.html#creating-threads-to-prefetch-using-queuerunner-objects中),它没有从tf.train.batch中捕获错误。