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



大家好

继续我的问题:我有一个简单的图像分类器(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(这真的很奇怪(。由于学习率较低,我在测试和训练中的准确性都很差。

我的方法错了吗?或者我应该更改一些超参数吗?谢谢

编辑

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

Im对两个分类器使用不同的精度公式,用于多类别分类:

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

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

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

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

最新更新