2017-09-30 373 views
2

使用Keras在高度不平衡的数据集上进行图像分割,并且我想按照here中所述对每个类中的像素值按比例重新加权。如果有一个具有weights = [0.8, 0.2]的二进制类,我如何修改K.sparse_categorical_crossentropy(y_true, y_pred)以根据像素所属的类重新减少损失?如何对Keras中的交叉熵损失进行权重不平衡类?

输入形状为(4, 256, 256, 1)(批次,高度,宽度,通道),输出是向量0和1的(4, 65536, 1)(正面和负面类)。模型和数据类似于here,不同之处在于图像是灰度图,蒙版图是二元图(2类)。

回答

1

这是我用于我的语义分割项目的自定义丢失函数。它从keras/backend/tensorflow_backend.py中的categorical_crossentropy函数进行了修改。

def class_weighted_pixelwise_crossentropy(target, output): 
    output = tf.clip_by_value(output, 10e-8, 1.-10e-8) 
    weights = [0.8, 0.2] 
    return -tf.reduce_sum(target * weights * tf.log(output)) 

请注意,我的最终版本没有使用类权重 - 我发现,它鼓励使用低比例的类作为填料对图像的补丁,这是不确定的,而不是使更多的现实猜测模型,并从而伤害了表现。

+1

数据的维度是什么?你也知道如何修改Keras中'sparse_categorical_crossentropy'的等价物吗? – Char