对在批量处理数据时,必须小心如何重置变量。在计算总体指标(即精度、准确度或auc)和批次指标时安排操作是不同的。在计算每批新数据的精度值之前,需要将运行变量重置为零。
tf.metrics.precision
,将创建两个运行变量并将其放入计算图中:
true_positives
false_positives
. 因此,您可以选择使用重置哪些变量
scope
论据
tf.get_collection()
import tensorflow as tf
import numpy as np
import numpy as np
import tensorflow as tf
labels = np.array([[1,1,1,0],
[1,1,1,0],
[1,1,1,0],
[1,1,1,0]], dtype=np.uint8)
predictions = np.array([[1,0,0,0],
[1,1,0,0],
[1,1,1,0],
[0,1,1,1]], dtype=np.uint8)
precision, update_op = tf.metrics.precision(labels, predictions, name = 'precision')
print(precision)
#Tensor("precision/value:0", shape=(), dtype=float32)
print(update_op)
#Tensor("precision/update_op:0", shape=(), dtype=float32)
tf.get_collection(tf.GraphKeys.LOCAL_VARIABLES)
#[<tf.Variable 'precision/true_positives/count:0' shape=() dtype=float32_ref>,
# <tf.Variable 'precision/false_positives/count:0' shape=() dtype=float32_ref>,
running_vars_precision = tf.get_collection(tf.GraphKeys.LOCAL_VARIABLES, scope='precision')
running_vars_auc_initializer = tf.variables_initializer(var_list=running_vars_precision )
with tf.Session() as sess:
sess.run(running_vars_auc_initializer)
print("tf precision/update_op: {}".format(sess.run([precision, update_op])))
#tf precision/update_op: [0.8888889, 0.8888889]
print("tf precision: {}".format(sess.run(precision)))
#tf precision: 0.8888888955116272