mediapipe_model_maker.face_stylizer.face_stylizer.loss_functions.FocalLoss

Implementation of focal loss (https://arxiv.org/pdf/1708.02002.pdf).

This class computes the focal loss between labels and prediction. Focal loss is a weighted loss function that modulates the standard cross-entropy loss based on how well the neural network performs on a specific example of a class. The labels should be provided in a one_hot vector representation. There should be #classes floating point values per prediction. The loss is reduced across all samples using 'sum_over_batch_size' reduction (see https://www.tensorflow.org/api_docs/python/tf/keras/losses/Reduction).

Example usage:

y_true = [[0, 1, 0], [0, 0, 1]]
y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
gamma = 2
focal_loss = FocalLoss(gamma)
focal_loss(y_true, y_pred).numpy()
0.9326
# Calling with 'sample_weight'.
focal_loss(y_true, y_pred, sample_weight=tf.constant([0.3, 0.7])).numpy()
0.6528

Usage with the compile() API:

model.compile(optimizer='sgd', loss=FocalLoss(gamma))

gamma Focal loss gamma, as described in class docs.
class_weight A weight to apply to the loss, one for each class. The weight is applied for each input where the ground truth label matches.

Methods

from_config

Instantiates a Loss from its config (output of get_config()).

Args
config Output of get_config().

Returns
A Loss instance.

get_config

Returns the config dictionary for a Loss instance.

__call__

View source

Invokes the Loss instance.

Args
y_true Ground truth values. shape = [batch_size, d0, .. dN], except sparse loss functions such as sparse categorical crossentropy where shape = [batch_size, d0, .. dN-1]
y_pred The predicted values. shape = [batch_size, d0, .. dN]
sample_weight Optional sample_weight acts as a coefficient for the loss. If a scalar is provided, then the loss is simply scaled by the given value. If sample_weight is a tensor of size [batch_size], then the total loss for each sample of the batch is rescaled by the corresponding element in the sample_weight vector. If the shape of sample_weight is [batch_size, d0, .. dN-1] (or can be broadcasted to this shape), then each loss element of y_pred is scaled by the corresponding value of sample_weight. (Note ondN-1: all loss functions reduce by 1 dimension, usually axis=-1.)

Returns
Weighted loss float Tensor. If reduction is NONE, this has shape [batch_size, d0, .. dN-1]; otherwise, it is scalar. (Note dN-1 because all loss functions reduce by 1 dimension, usually axis=-1.)

Raises
ValueError If the shape of sample_weight is invalid.