Tensorflow tf.metrics.accuracy multi-label 始终为零



我的标签如下所示:

label = [0, 1, 0, 0, 1, 1, 0]

换句话说,类 1、4、5 存在于相应的样品中。我认为这被称为软类

我用以下方法计算我的损失:

logits = tf.layers.dense(encoding, 7, activation=None)
cross_entropy = tf.nn.sigmoid_cross_entropy_with_logits(
    labels=labels,
    logits=logits
)
loss = tf.reduce_mean(cross_entropy)

根据Tensorboard的说法,正如预期的那样,损失随着时间的推移而减少。但是,精度在零时是平坦的:

eval_metric_ops = {
    'accuracy': tf.metrics.accuracy(labels=labels, predictions=logits),
}
tf.summary.scalar('accuracy', eval_metric_ops['accuracy'][1])

使用软类时如何计算模型的准确性?

你解决了这个问题吗?我认为关于softmax_cross_entropy_with_logits的评论是不正确的,因为你有一个多标签,(每个标签都是一个(二进制类问题。

部分解决方案:

labels = tf.constant([1, 1, 1, 0, 0, 0])  # example
predicitons = tf.constant([0, 1, 0, 0, 1, 0])  # example
is_equal = tf.equal(label, predicitons)
accuracy = tf.reduce_mean(tf.cast(is_equal, tf.float32))

这给出了一个数字,但仍需要将其转换为 tf 指标。

相关内容

  • 没有找到相关文章

最新更新