在深度学习中,一类的称重损失高于其他类

时间:2018-07-06 17:36:48

标签: image-processing neural-network keras deep-learning artificial-intelligence

在使用keras时,特别是对于U-net,我只知道仅以以下方式指定模型参数:

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=[mean_iou])

现在,我可以将损失设置为等于我定义的损失。但是,此损失函数将平均应用于所有类。我该如何做,以使对某些班级的错误预测比其他的错误预测更为权衡。

例如,假设每个图像中都有以下类。 类 A B C 。现在,A类和B类约占整个图像的45%,而C类仅约占整个图像的10%。但是,我非常关心对C类有较高的预测。

在这种情况下,损失函数的表现不佳,因为类别不平衡吸收了类别 c 的损失。因此,我想找出一种方法来加权一类比另一类损失更高的损失。

我也愿意接受其他解决此问题的建议-例如,也许有两个独立的网络?

编辑:Here是此问题的后续步骤,将需要实现该帖子已接受的答案。

1 个答案:

答案 0 :(得分:2)

您可以手动为每个班级分配权重。例如:

class_weight = {0: 0.2, 1: 0.3, 2: 0.25, 3: 0.25}
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=[mean_iou], class_weight=class_weight)

或者您可以使用此scikit库function 网络上也有很多示例,它们对您有用吗?