在多标签图像分类任务中,哪个损失函数会收敛得很好?

Posted

技术标签:

【中文标题】在多标签图像分类任务中,哪个损失函数会收敛得很好?【英文标题】:Which loss function will converge well in multi-label image classification task? 【发布时间】:2020-05-25 18:52:23 【问题描述】:

我通过使用sigmoid 作为输出激活函数和binary_crossentropy 作为损失函数训练了一个多标签多类图像分类器。 验证的准确率曲线呈现上下波动,而在几个 epoch 的损失曲线呈现出奇怪(非常高)的值。

以下是带有DropoutBatchNormalization 的微调(最后一个块)VGG19 模型的准确度和损失曲线。

Accuracy curveloss curve

带有DropoutBatchNormalizationData Augmentation 的微调(最后一个块)VGG19 模型的准确度和损失曲线。

accuracy curve with data augmentationloss curve with data augmentation

我已经用 1800 个训练图像(5 个标签)和 100 个验证图像训练了分类器。我使用的优化器是SGD((lr=0.001, momentum=0.99)。 谁能解释为什么损失曲线在某些时期变得如此奇怪或高价值? 我应该使用不同的损失函数吗?如果有,是哪一个?

【问题讨论】:

【参考方案1】:

别担心 - 一切都很好。您的损失曲线并没有说太多,尤其是“损失曲线中的尖峰”。他们完全被允许,您的模型仍在训练中。你应该看看你的准确度曲线,我认为那个上升很正常。

【讨论】:

感谢@Frederik 的回复。我仍然无法理解,为什么损失曲线会出现这些峰值。好吧,这个模型预测了 81/100 的所有正确标签,汉明损失约为 6% 为什么?这是巧合。该模型在训练时间的那一刻的权重很好地拟合了之前看到的训练数据,但显然它在测试数据上失败了很多时间。它还在学习中。想象一个孩子试图学习一些东西。比方说,经过一点练习,它认为它已经学会了完成任务的捷径,后来才发现这只是一个捷径,而且并不总是有效,所以它学会了完成任务的正确方法。 谢谢@Frederik,我明白了。

以上是关于在多标签图像分类任务中,哪个损失函数会收敛得很好?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在多标签分类问题中应用自定义损失时出现 TypeError

机器学习之--线性分类

图像分割损失函数OhemCELoss

图像分割损失函数OhemCELoss

图像分割损失函数OhemCELoss

阿尔伯特没有收敛 - HuggingFace