# tf.keras.losses.BinaryCrossentropy

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/keras-team/keras/tree/v2.13.1/keras/losses.py#L555-L660) |

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

Inherits From: [`Loss`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/losses/Loss)

#### View aliases


**Main aliases**

[`tf.losses.BinaryCrossentropy`](https://www.tensorflow.org/api_docs/python/tf/keras/losses/BinaryCrossentropy)
**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

\`tf.compat.v1.keras.losses.BinaryCrossentropy\`

<br />

    tf.keras.losses.BinaryCrossentropy(
        from_logits=False,
        label_smoothing=0.0,
        axis=-1,
        reduction=losses_utils.ReductionV2.AUTO,
        name='binary_crossentropy'
    )

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](https://en.wikipedia.org/wiki/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`](https://www.tensorflow.org/versions/r2.13/api_docs/python/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]]

<br />

<br />

<br />

| ## Args ||
|---|---|
| `from_logits` | Whether to interpret `y_pred` as a tensor of [logit](https://en.wikipedia.org/wiki/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`](https://www.tensorflow.org/versions/r2.13/api_docs/python/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 under a [`tf.distribute.Strategy`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/distribute/Strategy), except via [`Model.compile()`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model#compile) and [`Model.fit()`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model#fit), using `AUTO` or `SUM_OVER_BATCH_SIZE` will raise an error. Please see this custom training [tutorial](https://www.tensorflow.org/tutorials/distribute/custom_training) for more details. |
| `name` | Name for the op. Defaults to 'binary_crossentropy'. |

<br />

## Methods

### `from_config`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/losses.py#L285-L299)

    @classmethod
    from_config(
        config
    )

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

<br />

<br />

<br />

| Args ||
|---|---|
| `config` | Output of `get_config()`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A [`keras.losses.Loss`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/losses/Loss) instance. ||

<br />

### `get_config`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/losses.py#L270-L283)

    get_config()

Returns the config dictionary for a `Loss` instance.

### `__call__`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/losses.py#L101-L162)

    __call__(
        y_true, y_pred, sample_weight=None
    )

Invokes the `Loss` instance.

<br />

<br />

<br />

| 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 on`dN-1`: all loss functions reduce by 1 dimension, usually axis=-1.) |

<br />

<br />

<br />

<br />

| 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.) ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | If the shape of `sample_weight` is invalid. |

<br />