我对tensorflow指标(tf.metrics)有一些疑问。有一些指标可用,如准确性,精确度,false_positives等。
根据API精度等至少需要两个参数:
precision("ground truth values", "predicted values")
" session.run"我有一些带有Tensor的结果字典,请参阅下面的图片
如何使用此值来计算准确度,精度,false_positive等?
我尝试了以下内容:
prec = tf.metrics.precision(result_dict['groundtruth_boxes'], result_dict['detection_boxes'][0])
但是我收到以下错误:
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].
无论如何,我的尝试毫无意义,因为计算精确度"真正的积极因素"和#34;误报"是必要的。
答案 0 :(得分:1)
首先,tf.metrics
对于计算多批次的运行指标非常有用。因为他们需要在sess.run()
次呼叫中保持状态,所以并不像某些人所假设的那样简单。这是一篇很好的文章,解释了它们的工作原理:http://ronny.rest/blog/post_2017_09_11_tf_metrics/
对于你的问题,tf.metrics.precision
的参数必须(有效)是布尔张量。您无法直接输入边界框。例如,以下内容将打印1.0
:
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)
因为2
和3
都不为零。
您需要自己比较边界框(例如,对于每个框tf.reduce_all(tf.equal(expected_box, predicted_box))
),以便每个框都有一个True/False
标量。放入向量的所有这些标量将成为predictions
的{{1}}参数。 tf.metrics.precision
参数将是与labels
大小相同的True
张量。