深度学习分类中如何处理类之间的相关性?

Posted

技术标签:

【中文标题】深度学习分类中如何处理类之间的相关性?【英文标题】:How to deal with correlation between classes in deep learning classification? 【发布时间】:2020-02-25 22:37:27 【问题描述】:

我不确定如何处理深度学习分类网络中的某些类相互关联的情况。

例如,在对图像进行分类时,如果输入是狗的照片,输出标签是猫,那么损失应该低于输出标签是飞机或桥梁的情况。我想知道 cs 人之前是如何处理这个问题的,如果有任何论文我可以参考。谢谢!

【问题讨论】:

这可能是Data Science 更合适的问题 【参考方案1】:

tl;博士: 你不能/不应该

加长版: 如果,对于您的具体情况,您可以找到一个度量来确定类之间的距离,如下所示:

d[i,j] = f(L[i], L[j])

(其中d[i,j] 是标签为L[i]L[j] 的类之间的距离,f 是这两个类/标签的函数)然后您可以将其合并到您的损失函数中,这样如果d 大,损失会更大,如果d 小,损失会更小。

但是,在您的猫/狗/飞机/桥梁/...的示例中,我无法相信有一种正确的方法可以确定狗/猫或狗/桥梁等之间的距离。如果您真的想要,您当然可以手动确定,例如,如果您的图像包含猫,则预测桥梁比预测狗差 3 倍:

d[cat,dog]=1
d[cat,bridge]=3

但我根本不推荐这个。

我什么时候推荐这个?如果您有许多类和一个正确量化所有类之间相关性的相关矩阵

【讨论】:

对不起猫和狗不是一个很好的例子。我确实有这个相关矩阵。 在这种情况下,您可以创建一个自定义损失函数,将这个距离考虑在内 这就是我要找的。如何创建这个损失函数?谢谢! 或者我应该查找哪些术语? 您可以通过继承keras.losses.Loss来创建自定义损失函数。看看the implementation of built-in loss functions 看看它们是如何实现的。

以上是关于深度学习分类中如何处理类之间的相关性?的主要内容,如果未能解决你的问题,请参考以下文章

深度学习实战pytorch中如何处理RNN输入变长序列padding

深度学习分类任务评价指标

机器学习中如何处理不平衡数据?

深度学习入门之神经网络

深度学习项目三ResNet50多分类任务十二生肖分类

跟着ChatGPT学深度学习ChatGPT教我文本分类