2017-09-30 368 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