为了计算MNIST学习任务的准确性,我通常使用以下公式(下图中的灰线):
correct_pred = tf.equal(tf.argmax(self.target_placeholder, 1), tf.argmax(prediction, 1))
self.accuracy = tf.reduce_mean(tf.to_float(correct_pred))
今天,我确实看到该(下图中的橙色线)有张量流度量标准:
_, self.accuracy = tf.metrics.accuracy(tf.argmax(self.target_placeholder, 1), tf.argmax(prediction, 1))
但是得到的精度始终是非常不同的:
使用tensorflow度量标准时,精度更平滑且更差。
这是为什么?
答案 0 :(得分:1)
根据您的情节,我了解到您在训练期间比较了这两种选择。
第一个选项仅计算当前输入批次的准确性。这就解释了为什么该图有些嘈杂,尤其是在批量较小的情况下。从好的方面来说,它将始终是“最新的”,因为根据模型的当前状态,每一步的结果精度值为100%。
第二个选项实际上计算了运行平均值。它(以及tf.metrics
模块中的其他选项)用于计算数据流(即不适合单个批次的数据集)的整体准确性。因此,它主要用于评估目的,在此情况下,您要检查在保留的数据集上已经训练的模型的准确性。在训练过程中使用它的情况下,它会计算运行平均值的事实说明了平滑度以及曲线“更糟”的事实:平均值始终包含训练开始时的值,而准确性显然非常高。低。