# tf.keras.callbacks.EarlyStopping

<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/callbacks.py#L1970-L2143) |

Stop training when a monitored metric has stopped improving.

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

#### View aliases


**Compat aliases for migration**

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

\`tf.compat.v1.keras.callbacks.EarlyStopping\`

<br />

    tf.keras.callbacks.EarlyStopping(
        monitor='val_loss',
        min_delta=0,
        patience=0,
        verbose=0,
        mode='auto',
        baseline=None,
        restore_best_weights=False,
        start_from_epoch=0
    )

Assuming the goal of a training is to minimize the loss. With this, the
metric to be monitored would be `'loss'`, and mode would be `'min'`. A
`model.fit()` training loop will check at end of every epoch whether
the loss is no longer decreasing, considering the `min_delta` and
`patience` if applicable. Once it's found no longer decreasing,
`model.stop_training` is marked True and the training terminates.

The quantity to be monitored needs to be available in `logs` dict.
To make it so, pass the loss or metrics at `model.compile()`.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `monitor` | Quantity to be monitored. |
| `min_delta` | Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute change of less than min_delta, will count as no improvement. |
| `patience` | Number of epochs with no improvement after which training will be stopped. |
| `verbose` | Verbosity mode, 0 or 1. Mode 0 is silent, and mode 1 displays messages when the callback takes an action. |
| `mode` | One of `{"auto", "min", "max"}`. In `min` mode, training will stop when the quantity monitored has stopped decreasing; in `"max"` mode it will stop when the quantity monitored has stopped increasing; in `"auto"` mode, the direction is automatically inferred from the name of the monitored quantity. |
| `baseline` | Baseline value for the monitored quantity. Training will stop if the model doesn't show improvement over the baseline. |
| `restore_best_weights` | Whether to restore model weights from the epoch with the best value of the monitored quantity. If False, the model weights obtained at the last step of training are used. An epoch will be restored regardless of the performance relative to the `baseline`. If no epoch improves on `baseline`, training will run for `patience` epochs and restore weights from the best epoch in that set. |
| `start_from_epoch` | Number of epochs to wait before starting to monitor improvement. This allows for a warm-up period in which no improvement is expected and thus training will not be stopped. |

<br />

#### Example:

    callback = tf.keras.callbacks.EarlyStopping(monitor='loss', patience=3)
    # This callback will stop the training when there is no improvement in
    # the loss for three consecutive epochs.
    model = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
    model.compile(tf.keras.optimizers.SGD(), loss='mse')
    history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
                        epochs=10, batch_size=1, callbacks=[callback],
                        verbose=0)
    len(history.history['loss'])  # Only 4 epochs are run.
    4

## Methods

### `get_monitor_value`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/callbacks.py#L2130-L2140)

    get_monitor_value(
        logs
    )

### `set_model`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/callbacks.py#L694-L695)

    set_model(
        model
    )

### `set_params`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/callbacks.py#L691-L692)

    set_params(
        params
    )