stackinmyoverflow
stackinmyoverflow

Reputation: 11

Keras custom loss function with multiple arguments from fit generator

I want to create a custom loss which gets the output of the net and multiple arguments from a data generator.

I found this article, which describes how to calculate one loss from multiple layers with one label. But I want to calculate the loss from a single layer with multiple labels using the fit_generator. My problem is that Keras expects the output and the label to be of the same shape.

example:

Regular custom loss:

def custom_loss(y_pred, y_label):
        return K.mean(y_pred - y_label)

An example for the type of custom loss I want to use:

def custom_loss(y_pred, y_label, y_weights):
     loss = K.mean(y_pred - y_label)
     return tf.compat.v1.losses.compute_weighted_loss(loss, y_weights)

This is just an example my original code is a little more complicated. I just want to be able to give the loss function two parameters (y_label and y_weights) instead of only one (y_label).

Does anyone know how to solve this problem?

Upvotes: 1

Views: 1083

Answers (1)

Igna
Igna

Reputation: 1127

I am not sure what exactly you are asking but maybe you can use this. You can try something like a custom function that returns a loss function.

def custom_loss(y_weights):

    # Create a loss function that calculates what you want
    def example_loss(y_true,y_pred):
        loss = K.mean(y_pred - y_label)
        return tf.compat.v1.losses.compute_weighted_loss(loss, y_weights)

    # Return a function
    return example_loss

# Compile the model
model.compile(optimizer='adam',
          loss=custom_loss(y_weights), # Call the loss function with the preferred weights
          metrics=['accuracy'])

You can also take a look at this question

Upvotes: 1

Related Questions