在使用keras时,特别是对于U-net,我只知道仅以以下方式指定模型参数:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=[mean_iou])
现在,我可以将损失设置为等于我定义的损失。但是,此损失函数将平均应用于所有类。我该如何做,以使对某些班级的错误预测比其他的错误预测更为权衡。
例如,假设每个图像中都有以下类。 类 A , B 和 C 。现在,A类和B类约占整个图像的45%,而C类仅约占整个图像的10%。但是,我非常关心对C类有较高的预测。
在这种情况下,损失函数的表现不佳,因为类别不平衡吸收了类别 c 的损失。因此,我想找出一种方法来加权一类比另一类损失更高的损失。
我也愿意接受其他解决此问题的建议-例如,也许有两个独立的网络?
编辑:Here是此问题的后续步骤,将需要实现该帖子已接受的答案。
答案 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 网络上也有很多示例,它们对您有用吗?