# tf.keras.metrics.kl_divergence

<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#L2614-L2657) |

Computes Kullback-Leibler divergence loss between `y_true` \& `y_pred`.

#### View aliases


**Main aliases**

[`tf.keras.losses.KLD`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.keras.losses.kl_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.keras.losses.kld`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.keras.losses.kullback_leibler_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.keras.metrics.KLD`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.keras.metrics.kld`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.keras.metrics.kullback_leibler_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.losses.KLD`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.losses.kl_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.losses.kld`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.losses.kullback_leibler_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.metrics.KLD`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.metrics.kl_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.metrics.kld`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence), [`tf.metrics.kullback_leibler_divergence`](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/kl_divergence)
**Compat aliases for migration**

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

\`tf.compat.v1.keras.losses.KLD\`, \`tf.compat.v1.keras.losses.kl_divergence\`, \`tf.compat.v1.keras.losses.kld\`, \`tf.compat.v1.keras.losses.kullback_leibler_divergence\`, \`tf.compat.v1.keras.metrics.KLD\`, \`tf.compat.v1.keras.metrics.kl_divergence\`, \`tf.compat.v1.keras.metrics.kld\`, \`tf.compat.v1.keras.metrics.kullback_leibler_divergence\`

<br />

    tf.keras.metrics.kl_divergence(
        y_true, y_pred
    )

`loss = y_true * log(y_true / y_pred)`

See: <https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence>

#### Standalone usage:

    y_true = np.random.randint(0, 2, size=(2, 3)).astype(np.float64)
    y_pred = np.random.random(size=(2, 3))
    loss = tf.keras.losses.kullback_leibler_divergence(y_true, y_pred)
    assert loss.shape == (2,)
    y_true = tf.keras.backend.clip(y_true, 1e-7, 1)
    y_pred = tf.keras.backend.clip(y_pred, 1e-7, 1)
    assert np.array_equal(
        loss.numpy(), np.sum(y_true * np.log(y_true / y_pred), axis=-1))

<br />

<br />

<br />

| ## Args ||
|---|---|
| `y_true` | Tensor of true targets. |
| `y_pred` | Tensor of predicted targets. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A `Tensor` with loss. ||

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `TypeError` | If `y_true` cannot be cast to the `y_pred.dtype`. |

<br />