tf.metrics.accuracy返回两个值,accuracy为到上一个batch为止的准确度,update_op为更新本批次后的准确度。
accuracy, update_op = tf.metrics.accuracy(labels=x, predictions=y)
定义于:tensorflow/python/ops/metrics_impl.py。
计算predictions匹配labels的情况。
该accuracy函数创建两个局部变量,total和count用于计算predictions匹配labels的情况。这个频率被最终返回为accuracy:total/count。
因为有局部变量,所以要初始化局部变量,sess.run(tf.local_variables_initializer())
为了估计一连串的数据,该函数创建一个 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的操作。
看代码:
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]
v = sess.run([acc, acc_op], feed_dict={x: [1, 1, 1, 1, 0],
y: [0, 0, 0, 0, 1]})
#总的20个(正确4)
print(v) #[0.26666668, 0.2]