Я использую в Keras реализованную U-Net (https://arxiv.org/pdf/1505.04597.pdf) для сегментирования клеточных органелл на микроскопических изображениях. Чтобы моя сеть распознала несколько отдельных объектов, которые разделены только одним пикселем, я хочу использовать карты весов для каждого изображения этикетки (формула приведена в публикации).
Насколько я знаю, я должен создать свою собственную функцию потерь (в моем случае кроссцентропию), чтобы использовать эти карты весов. Однако пользовательская функция потерь принимает только два параметра. Как я могу добавить значения карты весов в такую функцию?
Ниже приведен код для моей пользовательской функции потери:
def pixelwise_crossentropy(self, ytrue, ypred):
ypred /= tf.reduce_sum(ypred, axis=len(ypred.get_shape()) - 1, keep_dims=True)
# manual computation of crossentropy
_epsilon = tf.convert_to_tensor(epsilon, ypred.dtype.base_dtype)
output = tf.clip_by_value(ypred, _epsilon, 1. - _epsilon)
return - tf.reduce_sum(ytrue * tf.log(output))
Есть ли способ объединить значения карты весов со значениями меток в тензоре ytrue?
Я прошу прощения, если эти вопросы кажутся глупыми, как я уже сказал, я относительно новичок в игре. Любая помощь или предложения будут с благодарностью!