当度量为 SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy 时,在 Keras 中使用啥损失函数?

Posted

技术标签:

【中文标题】当度量为 SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy 时,在 Keras 中使用啥损失函数?【英文标题】:What loss function to use in Keras when metric is SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy?当度量为 SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy 时,在 Keras 中使用什么损失函数? 【发布时间】:2021-01-06 09:10:39 【问题描述】:

对于多类分类问题,Keras 和 tf.keras 具有 SparseTopKCategoricalAccuracy 和 TopKCategoricalAccuracy 等指标。但是,如果使用 SparseCategoricalCrossentropy 或 CategoricalCrossentropy 等损失函数,则无法达到这两个指标的最大值。

当想要最大化 SparseTopKCategoricalAccuracy 或 TopKCategoricalAccuracy 时,使用什么好的损失函数?

我知道 SparseTopKCategoricalAccuracy 是不可微分的,就像 Accuracy 一样。我正在尝试找到一个可以近似平滑损失函数并为 SparseTopKCategoricalAccuracy 产生更高数字的函数。

【问题讨论】:

您能否详细说明为什么SparseCategoricalCrossentropyCategoricalCrossentropy 不适合您的目标? SparseCategoricalCrossentropy 和 CategoricalCrossentropy 是正确的指标。但它们不是损失函数。我正在寻找可以产生最大 SparceCategoricalCrossentropy 或 CategoricalCrossentropy 值的损失函数。 SparseCategoricalCrossentropyCategoricalCrossentropy 是损失函数:keras.io/api/losses/probabilistic_losses/…。会不会有错别字或误解? 你是对的。有一个错字。我的意思是,我想找到一个可以最大化 SparseTopKCategoricalAccuracy 和 TopKCategoricalAccuracy 的损失函数。最近有关于 top-k 错误的损失函数的工作。但它适用于 SVM。cv-foundation.org/openaccess/content_cvpr_2016/app/S06-51.pdf 感谢您指出我的错字。 【参考方案1】: 当您处理 Top-k 准确度时,

交叉熵并不是最佳损失函数,因为交叉熵可能容易在小型数据集或嘈杂的标签上过度拟合。 p>

正如您已经指出的,“平滑损失”函数是为使用 SVM 进行的 top-k 分类而开发的。据我所知,Keras/TF 中没有最适合 top-k 的“现成”损失函数。但是,我建议您尝试在 article 中提出并在 Pytorch 中实现的 Smooth Surrogate Loss (SSL) 与深度神经网络一起使用(见Github)。它源自多类 SVM,因为 SSL 在正确的 top-k 预测和不正确的预测之间创建了一个边距。由于分而治之的方法和多项式的使用,SSL 的训练时间与交叉熵的情况相当(参见implementation)。

【讨论】:

以上是关于当度量为 SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy 时,在 Keras 中使用啥损失函数?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以将字符串值显示为 mondrian olap 上的度量吗

Ssas 多维数据集向导不会为事实表列创建度量

信息及其度量

信息及其度量

信息及其度量

第六课算法效率的度量