当度量为 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 产生更高数字的函数。
【问题讨论】:
您能否详细说明为什么SparseCategoricalCrossentropy
或CategoricalCrossentropy
不适合您的目标?
SparseCategoricalCrossentropy 和 CategoricalCrossentropy 是正确的指标。但它们不是损失函数。我正在寻找可以产生最大 SparceCategoricalCrossentropy 或 CategoricalCrossentropy 值的损失函数。
SparseCategoricalCrossentropy
和 CategoricalCrossentropy
是损失函数: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 中使用啥损失函数?的主要内容,如果未能解决你的问题,请参考以下文章