我的标签如下所示:
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 指标。