我使用以下代码来评估模型的精确度和召回率。 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,?)。
有没有办法在运行时找出这两个张量的形状,或者解决这个问题?
答案 0 :(得分:1)
tf.metrics.recall
和precision
返回2个值,分别为recall
张量(update_op
)和{{1}}操作(请参阅tf.metrics.precision的文档)。您将两者都分配给单个变量。