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

2024-04-26 09:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,伙计们!

继续我的问题:我有一个简单的图像分类器(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。你知道吗


Tags: selfreducenetlabels分类器tf标签equal
1条回答
网友
1楼 · 发布于 2024-04-26 09:18:29

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

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

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

相关问题 更多 >