格式:
accuracy, update_op = tf.metrics.accuracy(labels=x, predictions=y)
tf.metrics.accuracy返回两个值,accuracy为到上一个batch为止的准确度,update_op为更新本批次后的准确度。
#官方文档 def accuracy(labels, predictions, weights=None, metrics_collections=None, updates_collections=None, name=None):
思路:
计算predictions匹配labels的情况。
该accuracy函数创建两个局部变量,total和count用于计算predictions匹配labels的情况。这个频率被最终返回为accuracy:total/count。
!!!!因为有局部变量,所以要初始化局部变量,sess.run(tf.local_variables_initializer())
例子看代码:
注意更新过程是个迭代过程,下面例子每次匹配5个预测值和真实值,在第二次的时候,5个值全部不匹配,所以正确率,即第一次正确匹配个数 除以总数.
import numpy as np import tensorflow as tf x = tf.placeholder(tf.int32, [5]) y = tf.placeholder(tf.int32, [5]) acc, acc_op = tf.metrics.accuracy(labels=x, predictions=y) sess = tf.InteractiveSession() sess.run(tf.global_variables_initializer()) sess.run(tf.local_variables_initializer()) v = sess.run([acc, acc_op], feed_dict={x: [1, 0, 0, 0, 0], y: [1, 0, 0, 0, 1]}) #总的5个(正确4) print(v) #[0.0, 0.8] v = sess.run([acc, acc_op], feed_dict={x: [1, 1, 1, 1, 0], y: [0, 0, 0, 0, 1]}) #总的10个(正确4) print(v) #[0.8, 0.4] v = sess.run([acc, acc_op], feed_dict={x: [1, 1, 1, 1, 0], y: [0, 0, 0, 0, 1]}) #总的15个(正确4) print(v) #[0.4, 0.26666668]
为了估计一连串的数据,该函数创建一个 update_op操作更新这些变量并返回accuracy。在内部,一个is_correct操作计算一个Tensor,当predictions和labels匹配时其中相应的元素为1.0,否则为0.0。然后update_op更新total和count的值。
如果weights是None,则权重默认为1.使用权重0来作为mask值。
参数:
labels:ground truth值,Tensor,其形状匹配 predictions。
predictions:预测值,任何形状的Tensor。
weights:可选,Tensor,其秩为0或与labels的秩相同,并且必须可广播到labels(即,所有维度必须1或者与相应 的labels维度相同)。
metrics_collections:accuracy应添加到的可选集合列表。
updates_collections:update_op应添加到的可选集合列表。
name:可选的,variable_scope名称。
返回:
accuracy:A Tensor,表示准确性,值total除以count。
update_op:适当增加total和count变量并且使其值匹配accuracy的操作
参考文献 :https://blog.csdn.net/lyb3b3b/article/details/83047148