将单标签分类器转换为多标签分类器

时间:2018-07-18 18:06:22

标签: python deep-learning classification image-recognition multiclass-classification

嗨,大家好!

要解决我的问题:我有一个简单的图像分类器(2conv + 2fc),它对我的​​数据集(95%acc)表现出色。但是我被要求通过更改来使其成为多标签分类器:

self.cost  = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(
            labels=self.labels,
            logits=self.out) )

进入:

self.cost  = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits (
                labels=self.labels,
                logits=self.out) )

在相同的学习率下,我有一个过拟合(我认为是),导致所有输入的测试输出均为0(这很奇怪)。而且学习率较低时,我在测试和训练上的准确性都非常差。

我的方法不对吗?还是应该更改一些超参数? 谢谢!

编辑

经过一些测试,我可以提供有关我的问题的更多细节。

我对两个分类器都使用了差异精度公式,用于多分类:

tf.equal(tf.argmax(self.net.labels, 1), tf.argmax(self.net.out, 1))

用于多标签分类:

correct_prediction = tf.equal(tf.round(self.net.output), tf.round(self.net.labels))
correct_prediction = tf.equal(tf.argmax(self.net.labels, 1), tf.argmax(self.net.out, 1))
self.accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

当我在两个模型中都使用第一个公式时,它们都给我很好的结果。

然而,带有多标签分类器的第二个公式给出了可怕的结果。这是因为第二个模型学会了最大化最可能的输出,但是最大输出的值太低,始终低于0.5。

1 个答案:

答案 0 :(得分:0)

是二进制分类问题吗? Sigmoid 仅适用于二进制分类问题。

Softmax Sigmoid 理论上是相同的,但实际上softmax最多可提供1%的精度。由于您的结果从95%下降,这表明您向网络提供标签的方式存在其他问题,或者可能是网络本身的问题。

验证标签的格式正确或网络存在任何固有问题。另外,使用Sigmoid验证必须有一个 输出,否则输出的数量就是类的数量。