了解 tf.metrics 和精简流媒体指标
Understanding tf.metrics and slims streaming metric
我不确定我是否正确理解了 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() 计算标签和预测张量的符号精度,但不 return 任何更新操作。事实上,这个版本是计算单个图像还是单个批次的准确度?基本上,如果我将批量大小设置为完整数据集的大小,那么此指标是否与 slim.metrics.streaming_accuracy?
的输出匹配
最后,如果我添加两次相同的更新操作,它会被调用两次吗?
谢谢!
是的,slim streaming accuracy 计算整个数据集的每批准确度的平均值(如果你只做一个 epoch)。
对于您的准确性功能,这取决于您如何实现它。
我不确定我是否正确理解了 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() 计算标签和预测张量的符号精度,但不 return 任何更新操作。事实上,这个版本是计算单个图像还是单个批次的准确度?基本上,如果我将批量大小设置为完整数据集的大小,那么此指标是否与 slim.metrics.streaming_accuracy?
的输出匹配最后,如果我添加两次相同的更新操作,它会被调用两次吗?
谢谢!
是的,slim streaming accuracy 计算整个数据集的每批准确度的平均值(如果你只做一个 epoch)。
对于您的准确性功能,这取决于您如何实现它。