如何正确使用tf.metrics?

时间:2017-09-29 05:23:08

标签: tensorflow

我使用以下代码来评估模型的精确度和召回率。 Z3和Y的形状都是(1,?)

predictions = tf.greater(Z3, 0.0)
labels = tf.greater(Y, 0.5)

true_positive = tf.logical_and(predictions, labels)
precision = tf.reduce_sum(tf.cast((true_positive), tf.float32)) / tf.reduce_sum(tf.cast((predictions), tf.float32))
recall = tf.reduce_sum(tf.cast((true_positive), tf.float32)) / tf.reduce_sum(tf.cast((labels), tf.float32))

上面的代码有效,但是当我切换到下面的代码时,它不起作用。

labels = tf.greater(Y, 0.5)
predictions = tf.greater(Z3, 0.0)

auc = tf.metrics.auc(labels, predictions)
precisions = tf.metrics.precision(labels, predictions)
recalls = tf.metrics.recall(labels, predictions)

InvalidArgumentError (see above for traceback): tags and values not the same shape: [] != [2] (tag 'recalls')
 [[Node: recalls = ScalarSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](recalls/tags, recalls/values)]]

似乎形状不同,但是当我打印它们时,都显示(1,?)。

有没有办法在运行时找出这两个张量的形状,或者解决这个问题?

1 个答案:

答案 0 :(得分:1)

tf.metrics.recallprecision返回2个值,分别为recall张量(update_op)和{{1}}操作(请参阅tf.metrics.precision的文档)。您将两者都分配给单个变量。