Help protect the Great Barrier Reef with TensorFlow on Kaggle Join Challenge

tf.keras.losses.BinaryCrossentropy

Computes the cross-entropy loss between true labels and predicted labels.

Inherits From: Loss

Used in the notebooks

Used in the guide Used in the tutorials

Use this cross-entropy loss for binary (0 or 1) classification applications. The loss function requires the following inputs:

  • y_true (true label): This is either 0 or 1.
  • y_pred (predicted value): This is the model's prediction, i.e, a single floating-point value which either represents a logit, (i.e, value in [-inf, inf] when from_logits=True) or a probability (i.e, value in [0., 1.] when from_logits=False).

Recommended Usage: (set from_logits=True)

With tf.keras API:

model.compile(
  loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
  ....
)

As a standalone function:

# Example 1: (batch_size = 1, number of samples = 4)
y_true = [0, 1, 0, 0]
y_pred = [-18.6, 0.51, 2.94, -12.8]
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True)
bce(y_true, y_pred).numpy()
0.865
# Example 2: (batch_size = 2, number of samples = 4)
y_true = [[0, 1], [0, 0]]
y_pred = [[-18.6, 0.51], [2.94, -12.8]]
# Using default 'auto'/'sum_over_batch_size' reduction type.
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True)
bce(y_true, y_pred).numpy()
0.865
# Using 'sample_weight' attribute
bce(y_true, y_pred, sample_weight=[0.8, 0.2]).numpy()
0.243
# Using 'sum' reduction` type.
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True,
    reduction=tf.keras.losses.Reduction.SUM)
bce(y_true, y_pred).numpy()
1.730
# Using 'none' reduction type.
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True,
    reduction=tf.keras.losses.Reduction.NONE)
bce(y_true, y_pred).numpy()
array([0.235, 1.496], dtype=float32)

Default Usage: (set from_logits=False)

# Make the following updates to the above "Recommended Usage" section
# 1. Set `from_logits=False`
tf.keras.losses.BinaryCrossentropy() # OR ...('from_logits=False')
# 2. Update `y_pred` to use probabilities instead of logits
y_pred = [0.6, 0.3, 0.2, 0.8] # OR [[0.6, 0.3], [0.2, 0.8]]

from_logits Whether to interpret y_pred as a tensor of logit values. By default, we assume that y_pred contains probabilities (i.e., values in [0, 1]).
label_smoothing Float in [0, 1]. When 0, no smoothing occurs. When > 0, we compute the loss between the predicted labels and a smoothed version of the true labels, where the smoothing squeezes the labels towards 0.5. Larger values of label_smoothing correspond to heavier smoothing.
axis The axis along which to compute crossentropy (the features axis). Defaults to -1.
reduction Type of tf.keras.losses.Reduction to apply to loss. Default value is AUTO. AUTO indicates that the reduction option will be determined by the usage context. For almost all cases this defaults to SUM_OVER_BATCH_SIZE. When used with tf.distribute.Strategy, outside of built-in training loops such as tf.keras compile and fit, using AUTO or SUM_OVER_BATCH_SIZE will raise an error. Please see this custom training tutorial for more details.
name Name for the op. Defaults to 'binary_crossentropy'.

Methods

from_config

View source

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