Mark.F
Mark.F

Reputation: 1694

Custom Loss Function - Attention to small regions

I want to use a loss function which includes an expression for the area used by the attention model.

My model is a classification model, designed to perform the decision based on a small region of the original image.

So I would like my loss function to be:

Loss = categorical_crossentropy(y_pred, y_true) + alpha*A

where A is the area from the attention model.

How can I create a custom loss function in Keras, which minimizes the sum of the standard loss + some additional function?

Upvotes: 1

Views: 182

Answers (1)

Daniel Möller
Daniel Möller

Reputation: 86630

Make a model that outputs both things, y_pred and A:

#blablabla functional API model definition
model = Model(inputs, [predictions, areaOutput])

Make a custom area loss:

def areaLoss(trueArea, predArea):
    return predArea

Compile the model with one loss per output, and use alpha as the weight for the area loss:

model.compile(loss=['categorical_crossentropy', areaLoss], loss_weights=[1,alpha], ...)

Fit with a dummy value for the area as output:

model.fit(x_train, [y_train, np.zeros((totalSamples,))], ...)

Upvotes: 2

Related Questions