Tensorflow tf.metrics.accuracy多标签始终为零

时间:2018-01-27 05:20:31

标签: tensorflow machine-learning multiclass-classification

我的标签如下:

ios.plistInject=<key>UISupportedExternalAccessoryProtocols</key> <array><string>com.honeywell.scansled.protocol.decoder</string><string>com.honeywell.scansled.protocol.msr</string><string>com.honeywell.scansled.protocol.pm</string></array>

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

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

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

据Tensorboard称,损失随着时间的推移正在减少,正如预期的那样。但是,准确度为零:

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)

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

1 个答案:

答案 0 :(得分:0)

您解决了吗?我认为有关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指标。