【问题标题】:Weighing loss of one class higher than others in deep learning在深度学习中,一个类的权重损失高于其他类
【发布时间】:2018-12-15 08:31:38
【问题描述】:

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

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

现在我可以将损失设置为等于我定义的任何值。但是,此损失函数将均匀地应用于所有类。我如何做到这一点,以便某些类的错误预测比其他错误预测的权重更大。

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

在这种情况下,损失函数并不能很好地发挥作用,因为类不平衡吸收了类 c 的损失。因此,我想找到一种方法来衡量一个班级的损失高于另一个班级。

我也对解决此问题的其他建议持开放态度 - 例如,也许有两个独立的网络?

编辑:Here 是对这个问题的后续跟进,需要实施该帖子已接受的答案。

【问题讨论】:

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


    【解决方案1】:

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

    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 网上也有很多例子,没有一个对你有用吗?

    【讨论】:

    • 很好,所以在那个例子中,假设我有 4 个班级,对吧?我怎么知道要分配多少重量?它是武断的/实验性的,还是有条不紊的方法来做到这一点?
    • 建议你看看这个scikit函数scikit-learn.org/stable/modules/generated/…
    猜你喜欢
    • 2020-11-09
    • 2018-12-27
    • 1970-01-01
    • 2018-06-21
    • 2016-10-14
    • 2014-12-11
    • 2021-02-28
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多