Дизайн функции потери, чтобы включить различный вес для ложного положительного и ложного отрицательного
Я пытаюсь решить проблему семантической сегментации. В соответствии с реальными ограничениями критерии ложноположительного и ложноположительного различны. Например, если пиксель неверно исправлен, поскольку передний план менее желателен, чем пиксель неверно исправлен как фон. Как справиться с такого рода ограничениями при настройке функции потерь.
2 ответа
Вы можете использовать class_weight
параметр model.fit
оценивать ваши классы и, как таковые, наказывать ошибочные классификации по-разному в зависимости от класса.
class_weight
: необязательный словарь, отображающий индексы класса (целые числа) в вес (число с плавающей запятой) для применения к потере модели для выборок из этого класса во время обучения. Это может быть полезно для того, чтобы сказать модели "уделять больше внимания" выборкам из недопредставленного класса.
Например:
out = Dense(2, activation='softmax')
model = Model(input=..., output=out)
model.fit(X, Y, class_weight={0: 1, 1: 0.5})
Это накажет второй класс меньше, чем первый.
Проверьте функцию потери расстояния по Jaccard (или IOU) в keras-contrib:
Эта потеря полезна, когда у вас есть несбалансированное количество пикселей в изображении, потому что это дает всем классам одинаковый вес. Однако это не стандарт по умолчанию для сегментации изображения. Например, предположим, что вы пытаетесь предсказать, является ли каждый пиксель кошкой, собакой или фоном. У вас 80% фоновых пикселей, 10% собака и 10% кошка. Если модель прогнозирует 100% фона, должно ли быть 80% правильности (как в случае категориальной перекрестной энтропии) или 30% (с учетом этой потери)?
Источник: https://github.com/keras-team/keras-contrib/blob/master/keras_contrib/losses/jaccard.py