首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow tf.metrics

tensorflow tf.metrics
EN

Stack Overflow用户
提问于 2018-02-01 20:52:27
回答 1查看 1.3K关注 0票数 0

我有一些关于tensorflow指标(tf.metrics)的问题。有一些指标可用,如准确性、精确度、false_positives等。

根据API精度等至少需要两个参数:

代码语言:javascript
复制
precision("ground truth values", "predicted values")

在"session.run“之后,我有一个带有一些张量的结果字典,请看下面的图片

result dict

detection boxes

groundtruth box

detection scores

如何使用这些值来计算精度、精度、false_positive等?

我尝试了以下几种方法:

代码语言:javascript
复制
prec = tf.metrics.precision(result_dict['groundtruth_boxes'],  result_dict['detection_boxes'][0])

但我得到以下错误:

代码语言:javascript
复制
ValueError: Can not squeeze dim[1], expected a dimension of 1, got 4 for 'precision/remove_squeezable_dimensions/Squeeze' (op: 'Squeeze') with input shapes: [1,4].

无论如何,我的尝试是没有意义的,因为为了计算精度,“真阳性”和“假阳性”是必要的。

EN

回答 1

Stack Overflow用户

发布于 2018-02-20 10:18:06

首先,tf.metrics主要用于计算多个批次的运行指标。因为它们需要在sess.run()调用中保持状态,所以它们并不像一些人想象的那么简单。这里有一篇很好的文章解释了它们是如何工作的:http://ronny.rest/blog/post_2017_09_11_tf_metrics/

对于你的问题,tf.metrics.precision的参数必须(有效地)是布尔张量。您不能直接馈送边界框。例如,下面的代码将打印1.0

代码语言:javascript
复制
prediction = tf.constant([1., 1., 2., 2.])
label = tf.constant([1., 1., 3., 3.])
precision, update_op = tf.metrics.precision(label, prediction)

with tf.Session() as sess:
  sess.run(tf.local_variables_initializer())
  sess.run(update_op)
  print sess.run(precision)

因为23都是非零的。

您需要自己比较边界框(例如,对每个框执行tf.reduce_all(tf.equal(expected_box, predicted_box))),以便每个框都有一个True/False标量。所有这些放入向量中的标量都会成为tf.metrics.precisionpredictions参数。labels参数将是与predictions大小相同的True张量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48563230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档