【发布时间】:2019-04-08 06:55:57
【问题描述】:
我试图了解如何在 Tensorflow 中聚合度量变量,我遇到了tf.contrib.metrics.streaming_dynamic_auc。它聚合了预测和标签,这看起来很简单,但让我感到困惑的是,初始化后的第一次运行给出了 0,并且所有后续运行都可以正常工作。这是代码。
import tensorflow as tf
import random
random.seed(121231)
n_points = 1000
y_true = [random.randint(0, 1) for _ in xrange(n_points)]
y_pred = [random.random() for _ in xrange(n_points)]
pds = tf.placeholder(tf.float32, [n_points])
lbs = tf.placeholder(tf.int32, [n_points])
with tf.Session() as sess:
auc_dynamic = tf.contrib.metrics.streaming_dynamic_auc(predictions=pds, labels=lbs)
auc = tf.metrics.auc(predictions=pds, labels=lbs)
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
auc_dynamic_val, auc_dynamic_op = sess.run(auc_dynamic, {pds:y_pred, lbs:y_true})
auc_val, auc_op = sess.run(auc, {pds: y_pred, lbs: y_true})
print("1st run. Dynamic auc val %.7f, op: %s" % (auc_dynamic_val, auc_dynamic_op))
print("1st run. Auc val %.7f, op: %s" % (auc_val, auc_op))
auc_dynamic_val, auc_dynamic_op = sess.run(auc_dynamic, {pds: y_pred, lbs: y_true})
auc_val, auc_op = sess.run(auc, {pds: y_pred, lbs: y_true})
print("2nd run. Dynamic auc val %.7f, op: %s" % (auc_dynamic_val, auc_dynamic_op))
print("2nd run. Auc val %.7f, op: %s" % (auc_val, auc_op))
打印出来:
1st run. Dynamic auc val 0.0000000, op: None
1st run. Auc val 0.0000000, op: 0.5043121
2nd run. Dynamic auc val 0.5043422, op: None
2nd run. Auc val 0.5043121, op: 0.5043121
dynamic auc 和 auc 之间存在差异动态 auc op 始终为 None,并且在第一次运行时其值为 0。但在第二次运行时,值匹配。
【问题讨论】:
标签: python tensorflow