Пользовательская функция потерь Keras с множественной выходной моделью

#tensorflow #keras #conv-neural-network #loss-function

#tensorflow #keras #conv-нейронная сеть #функция потерь

Вопрос:

В задаче сегментации я хотел, чтобы моя модель имела два вывода, потому что я реализовал весовые карты, как это было предложено в оригинальной статье U-net https://arxiv.org/pdf/1505.04597.pdf .

Согласно предложению, я создал weightmaps, сконцентрировав часть основной маски истинности, чтобы иметь более высокие веса. Теперь у меня есть модель с.

 weightmap=layers.Lambda(lambda x:x)(weight_map) # A non trainable layer to output this as tensor for loss function
Model=model(inputs=[input,weight_map], outputs=[output,weightmap]
 

Теперь мне нужно вычислить двоичную перекрестную потерю энтропии для следующей модели

 def custom_loss(target,outputs):
    loss=K.binary_crossentropy(target,outputs[0]) #ouputs[0] should be the model output
    loss=loss*outputs[1] #outputs[1] should be weightmaps 
    return loss 
 

Этот вывод [0] и вывод [1] нарезки выходного тензора из модели не работает.

Могу ли я что-нибудь сделать, чтобы реализовать следующее с обоими выходами модели в одной функции потерь?

Комментарии:

1. Можете ли вы уточнить «тензор вывода из модели не работает»? Вы получаете какую-либо ошибку?

2. @Srivathsa Вычисление потерь было вне графика модели. Итак, нарезка выходного тензора не работает, хотя моя модель имеет два выхода (т. Е. Значения нарезанного тензора не соответствуют выходным данным и карте веса), и я не могу понять, почему. Но я нашел обходной путь для введения этих весовых карт, вычислив потери внутри графика модели. Но не смог найти решение для этого.