多类图像分类中如何获取权重图

Posted

技术标签:

【中文标题】多类图像分类中如何获取权重图【英文标题】:How to obtain weights map in multi class image classification 【发布时间】:2019-09-08 13:25:43 【问题描述】:

我正在使用 keras 和 TensorFlow 进行多类图像分割。我训练有素的网络给了我很好的预测,但无法分离触摸对象,这就是为什么我想使用具有"weights" 参数的softmax_cross_entropy 损失函数。

知道我的y_true 形状是(batch-size,128,128,3),我如何计算这些权重?

tf.losses.softmax_cross_entropy(y_true,y_pred,weights=my_weights)

【问题讨论】:

【参考方案1】:

根据tf.losses.softmax_cross_entropy 的文档,您可以使用该参数对每个批次的样本进行不同的加权,它应该是形状为batch_size 的张量。

weights 充当损失系数。如果提供标量, 然后损失只是按给定值缩放。如果weights 是 形状为[batch_size] 的张量,然后将损失权重应用于每个 对应的样本。

但是,this answer 显示了如何为每个类分配不同的权重(也许您的数据集不平衡?)。我想这可能是您想要实现的更多目标。

【讨论】:

我的标签中的类分布不一样,所以我假设我的数据集不平衡。根据您发布的链接中的答案,他们使用ratio 来计算class_weight,当我有 800 个训练图像标签时,如何找到这个配给?【参考方案2】:

您可以使用 sklearn 计算不平衡数据集的 class weight。并使用这些计算出的参数在tf.losses.softmax_cross_entropy 中分配weights。这将有助于解决您的问题。

【讨论】:

以上是关于多类图像分类中如何获取权重图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DecisionTreeClassifier 中设置类权重以进行多类设置

如何在 Java 中获取 LibSVM 分类器的权重?

Sklearn SVM 系数属性 - 如何获取类名?

用于多类分类的 pytorch 类权重

如何获取多类的所有混淆矩阵术语(TPR、FPR、TNR、FNR)?

使用 OpenCV 在多类分类中获取 SVM 分类分数