我在TensorFlow中计算曲线下面积(AUC)。 这是我的代码的一部分:
np.array(x).astype(np.float)
rekt = []
for m in x:
rekt.append(float(m));
np.array(da[i]).astype(np.float)
print(np.corrcoef(rekt,da[i]))
output = np.corrcoef(rekt,da[i])
`
在上面的代码中, with tf.name_scope("output"):
W = tf.Variable(tf.random_normal([num_filters_total, num_classes], stddev=0.1), name="W")
b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b")
l2_loss += tf.nn.l2_loss(W)
l2_loss += tf.nn.l2_loss(b)
self.scores = tf.nn.xw_plus_b(self.h_drop, W, b, name="scores")
self.softmax_scores = tf.nn.softmax(self.scores)
self.predictions = tf.argmax(self.scores, 1, name="predictions")
# CalculateMean cross-entropy loss
with tf.name_scope("loss"):
self.losses = tf.nn.softmax_cross_entropy_with_logits(labels=self.input_y,logits=self.scores)
self.loss = tf.reduce_mean(self.losses) + l2_reg_lambda * l2_loss
# Accuracy
with tf.name_scope("accuracy"):
correct_predictions = tf.equal(self.predictions, tf.argmax(self.input_y, 1))
self.accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"), name="accuracy")
# AUC
with tf.name_scope("auc"):
self.auc = tf.metrics.auc(labels = tf.argmax(self.input_y, 1), predictions = self.predictions)`
是一个形状为input_y
的张量,(batch_size,2)
的形状为predictions
。
因此,(batch_size,)
中labels
和predictions
变量的实际值为tf.metrics.auc
。
我想知道它是否是计算AUC的正确方法?
我已尝试使用以下命令:
[0,1,1,1,0,0,...]
但这只给我零数字。
我注意到的另一件事是,虽然self.auc = tf.metrics.auc(labels = tf.argmax(self.input_y, 1), predictions = tf.reduce_max(self.softmax_scores,axis=1))
在训练过程结束时非常稳定,但第一种方法计算的accuracy
不断增加。那是对的吗?
感谢。