joh*_*odo 5 loss keras cross-entropy
我已经建立了一个用于图像分割的Keras模型(U-Net).然而,在我的样本中,一些错误分类(区域)并不重要,而其他错误分类是至关重要的,所以我想为它们分配更高权重的损失函数.为了使事情进一步复杂化,我希望一些错误分类(1级而不是2级)具有非常高的惩罚,而反向(2级而不是1)不应该受到如此大的惩罚.
我看到它的方式,我需要使用(在所有像素)加权分类crossentropy的总和,但我能找到的最好是这样:
def w_categorical_crossentropy(y_true, y_pred, weights):
nb_cl = len(weights)
final_mask = K.zeros_like(y_pred[:, 0])
y_pred_max = K.max(y_pred, axis=1)
y_pred_max = K.reshape(y_pred_max, (K.shape(y_pred)[0], 1))
y_pred_max_mat = K.cast(K.equal(y_pred, y_pred_max), K.floatx())
for c_p, c_t in product(range(nb_cl), range(nb_cl)):
final_mask += (weights[c_t, c_p] * y_pred_max_mat[:, c_p] * y_true[:, c_t])
return K.categorical_crossentropy(y_pred, y_true) * final_mask
Run Code Online (Sandbox Code Playgroud)
然而,这个代码只适用于单个预测,而我对Keras内部工作的知识缺乏(并且它的数学方面并没有好多少).任何人都知道如何适应它,甚至更好,是否有适合我的情况的现成的损失功能?
我会很感激一些指点.
编辑:我的问题类似于如何在Keras中逐点分类的交叉熵损失?,除了我想使用加权分类交叉熵.
您可以使用权重图(如U-Net 论文中提出的)。在这些权重图中,您可以对权重较大或较小的区域进行权重。这是一些伪代码:
loss = compute_categorical_crossentropy()
weighted_loss = loss * weight_map # using element-wise multiplication
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |