了解tf.metrics和slims流量度量标准

时间:2017-08-15 14:09:08

标签: tensorflow tf-slim

我不确定我是否正确了解tf.metrics和tf.contrib.slim.metrics。

以下是该计划的一般流程:

# Setup of the neural network...

# Adding some metrics
dict_metrics[name] = compute_metric_and_update_op()

# Getting a list of all metrics and updates
names_to_values, names_to_updates = slim.metrics.aggregate_metric_map(dict_metrics)

# Calling tf.slim evaluate
slim.evaluation.evaluation_loop(eval_op=list(names_to_updates.values()), ...)

我们假设我想计算准确度。我有两个选择: a)计算所有批次中所有图像中所有像素的准确度 b)计算一个图像中所有像素的准确度,并获取所有批次中所有图像的所有精度的平均值。

对于版本a)这就是我要写的:

name = "slim/accuracy_metric"
dict_metrics[name] = slim.metrics.streaming_accuracy(
    labels, predictions, weights=weights, name=name)

哪一个应该相当于:

name = "accuracy_metric"
accuracy, update_op = tf.metrics.accuracy(
    labels, predictions, weights=weights, name=name)
dict_metrics[name] = (accuracy, update_op)

此外,添加此行

应该毫无意义甚至是错误的
dict_metrics["stream/" + name] = slim.metrics.streaming_mean(accuracy)

因为我从tf.metrics.accuracy获得的准确性已经通过update_op计算了所有批次。正确的吗?

如果我选择b),我可以达到这样的效果:

accuracy = my_own_compute_accuracy(labels, predictions)
dict_metrics["stream/accuracy_own"] = \
    slim.metrics.streaming_mean(accuracy)

其中my_own_compute_accuracy()计算标签和预测张量的符号精度,但不返回任何更新操作。事实上,这个版本是否计算单个图像或单个批次的准确度?基本上,如果我将批量大小设置为完整数据集的大小,那么此度量标准是否与slim.metrics.streaming_accuracy的输出匹配?

最后,如果我两次添加相同的更新操作,它会被调用两次吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,纤细的流式传输精度计算整个数据集中每批次精度的平均值(如果你只做一个纪元)。

对于准确性功能,它取决于您如何实现它。