我已经尽我所能检查了堆栈溢出和 Tensorflow API 中有关 Estimator.evaluate() 的部分,但未能找到任何解决此问题的方法。
我是一名从事 Tensorflow 研究项目的学生,我一直在使用 evaluate() 跟踪准确性并将返回的值存储在文本文件中。我的顾问教授(他与 ML/NN 合作,但不专门研究 python 和 Tensorflow)想知道该准确度值是否特定于它当时看到的那批数据,或者它是否是该网络从开始到最后的整体准确度及时。
有人可以澄清一下,“准确度”是衡量给定批处理数据在评估时的准确性,还是衡量到当时(包括那一刻)它所看到的所有批处理/数据?
如果它不是所有批处理的衡量标准,是否有任何方法可以从网络中找到它,或者我是否需要手动计算它?
关于我如何构建/训练我的网络(以防万一):我在比 Keras 略低的级别构建模型(例如,我使用 tf.layers 在方法中定义架构),我也从未明确地使用 tf.session() 运行网络(我只是在尝试过并且过去的网络没有它时运行良好时才遇到麻烦)。
请您参考如下方法:
Estimator.evaluate() 在每个步骤中调用 input_fn 返回一批数据,如文档 https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator#evaluate 中所示.因此,您的 input_fn 返回的内容在这里很重要,即如果测试数据很小,它可以返回整个数据,或者如果测试数据很大,它可以分批返回数据。
如果您的测试数据集小到可以放入内存 (RAM),input_fn 一次返回所有测试数据,您可以一次通过并获得结果
例如 结果 = 分类器.evaluate(test_inpf)
现在,如果您的测试数据很大,无法放入内存,为了获得整个测试数据集的准确性,您可以在每个批处理上获得准确性(因为 input_fn 现在将返回批处理)并采取数据集中所有批处理的运行平均值。 例如如果您的测试数据集有 100 个示例。批量大小为 10。 对于大小为 10 的每批处理,您评估准确性。您获得数据集的 10 个精度值。然后这些的平均值就是模型在整个数据集上的准确性。
这也是 TensorFlow 网站上的有用教程 https://www.tensorflow.org/tutorials/estimators/linear
