如何使用 tf.metrics.accuracy?

Posted

技术标签:

【中文标题】如何使用 tf.metrics.accuracy?【英文标题】:How to use tf.metrics.accuracy? 【发布时间】:2018-03-28 23:16:35 【问题描述】:

我想使用tf.metrics.accuracy 来跟踪我的预测的准确性,但我不确定如何使用函数返回的update_op(下面的acc_update_op):

accuracy, acc_update_op = tf.metrics.accuracy(labels, predictions)

我认为将其添加到 tf.GraphKeys.UPDATE_OPS 会有意义,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

tf.metrics.accuracy 是众多流式度量 TensorFlow 操作之一(另一个是 tf.metrics.recall)。创建后,将创建两个变量(counttotal),以便为一个最终结果累积所有传入结果。第一个返回值是计算count / total 的张量。返回的第二个操作是更新这些变量的有状态函数。流式度量函数在评估分类器在多批数据上的性能时很有用。一个简单的使用示例:

# building phase
with tf.name_scope("streaming"):
    accuracy, acc_update_op = tf.metrics.accuracy(labels, predictions)

test_fetches = 
    'accuracy': accuracy,
    'acc_op': acc_update_op


# when testing the classifier    
with tf.name_scope("streaming"):
    # clear counters for a fresh evaluation
    sess.run(tf.local_variables_initializer())

for _i in range(n_batches_in_test):
    fd = get_test_batch()
    outputs = sess.run(test_fetches, feed_dict=fd)

print("Accuracy:", outputs['accuracy'])

我认为将其添加到 tf.GraphKeys.UPDATE_OPS 会有意义,但我不知道该怎么做。

除非您仅将 UPDATE_OPS 集合用于测试目的,否则这不是一个好主意。通常,该集合已经具有用于训练阶段的某些控制操作(例如移动批量标准化参数),这些操作并不意味着与验证阶段一起运行。最好将它们保存在新集合中或手动将这些操作添加到 fetch 字典中。

【讨论】:

好的,我看到使用tf.GraphKeys.UPDATE_OPS 没有意义,但是使用tf.GraphKeys.SUMMARIES 呢?我该怎么办? tf.GraphKeys.SUMMARIES,你说?那个是用来保存汇总张量的,所以你也不应该使用它。没有标准的集合键,但你可以选择你自己的一个(例如'metric_ops')。将这些操作放在一个集合中仅意味着您还要负责确保在评估阶段的每次迭代中执行它们。 我找到了另一个解决方案,您愿意发表评论吗? with tf.control_dependencies([accuracy_op]): tf.summary.scalar('accuracy', accuracy) 这行得通,只是每个步骤都会生成一个摘要(通常您只需要在最后一步或之后不久)。它可能不是在这里建模的最佳依赖项。

以上是关于如何使用 tf.metrics.accuracy?的主要内容,如果未能解决你的问题,请参考以下文章

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等