Я использую U-Net, реализованную в Keras (https://arxiv.org/pdf/1505.04597.pdf) для сегментации клеточных органелл на микроскопических изображениях. Чтобы моя сеть распознавала несколько одиночных объектов, разделенных всего 1 пикселем, я хочу использовать карты весов для каждого изображения метки (формула приведена в публикации).
Насколько я знаю, мне нужно создать свою собственную функцию потерь (в моем случае кроссэнтропию), чтобы использовать эти карты весов. Однако пользовательская функция потерь принимает только два параметра. Как я могу добавить значения карты весов в такую функцию?
Ниже приведен код моей пользовательской функции потерь:
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 тензоре?
Прошу прощения, если эти вопросы покажутся глупыми, как я уже сказал, я относительно новичок в игре. Любая помощь или предложения будут с благодарностью!