2017-09-30 22 views
2

高度に不均衡なデータセットの画像分割にKerasを使用し、hereと記載されているように、各クラスのピクセル値に比例するクラスを再加重する必要があります。 weights = [0.8, 0.2]のバイナリクラスを持っている場合、ピクセルが属するクラスに応じて損失を再加重するにはどのようにしてK.sparse_categorical_crossentropy(y_true, y_pred)を修正できますか?ケラスのクロスエントロピー損失のために体重不均衡クラスを行うには?

入力は形状(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

関連する問題