# tf.keras.callbacks.Callback

<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#L621-L933) |

Abstract base class used to build new callbacks.

#### View aliases


**Compat aliases for migration**

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

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

<br />

    tf.keras.callbacks.Callback()

Callbacks can be passed to keras methods such as `fit`, `evaluate`, and
`predict` in order to hook into the various stages of the model training and
inference lifecycle.

To create a custom callback, subclass [`keras.callbacks.Callback`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/callbacks/Callback) and
override the method associated with the stage of interest. See
https://www.tensorflow.org/guide/keras/custom_callback for more information.

#### Example:

    training_finished = False
    class MyCallback(tf.keras.callbacks.Callback):
      def on_train_end(self, logs=None):
        global training_finished
        training_finished = True
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(1, input_shape=(1,))])
    model.compile(loss='mean_squared_error')
    model.fit(tf.constant([[1.0]]), tf.constant([[1.0]]),
              callbacks=[MyCallback()])
    assert training_finished == True

If you want to use `Callback` objects in a custom training loop:

1. You should pack all your callbacks into a single [`callbacks.CallbackList`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/callbacks/CallbackList) so they can all be called together.
2. You will need to manually call all the `on_*` methods at the appropriate locations in your loop. Like this:

#### Example:

       callbacks =  tf.keras.callbacks.CallbackList([...])
       callbacks.append(...)
       callbacks.on_train_begin(...)
       for epoch in range(EPOCHS):
         callbacks.on_epoch_begin(epoch)
         for i, data in dataset.enumerate():
           callbacks.on_train_batch_begin(i)
           batch_logs = model.train_step(data)
           callbacks.on_train_batch_end(i, batch_logs)
         epoch_logs = ...
         callbacks.on_epoch_end(epoch, epoch_logs)
       final_logs=...
       callbacks.on_train_end(final_logs)

The `logs` dictionary that callback methods
take as argument will contain keys for quantities relevant to
the current batch or epoch (see method-specific docstrings).

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `params` | Dict. Training parameters (eg. verbosity, batch size, number of epochs...). |
| `model` | Instance of [`keras.models.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model). Reference of the model being trained. |

<br />

## Methods

### `on_batch_begin`

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

    on_batch_begin(
        batch, logs=None
    )

A backwards compatibility alias for `on_train_batch_begin`.

### `on_batch_end`

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

    on_batch_end(
        batch, logs=None
    )

A backwards compatibility alias for `on_train_batch_end`.

### `on_epoch_begin`

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

    on_epoch_begin(
        epoch, logs=None
    )

Called at the start of an epoch.

Subclasses should override for any actions to run. This function should
only be called during TRAIN mode.

<br />

<br />

<br />

| Args ||
|---|---|
| `epoch` | Integer, index of epoch. |
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_epoch_end`

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

    on_epoch_end(
        epoch, logs=None
    )

Called at the end of an epoch.

Subclasses should override for any actions to run. This function should
only be called during TRAIN mode.

<br />

<br />

<br />

| Args ||
|---|---|
| `epoch` | Integer, index of epoch. |
| `logs` | Dict, metric results for this training epoch, and for the validation epoch if validation is performed. Validation result keys are prefixed with `val_`. For training epoch, the values of the `Model`'s metrics are returned. Example: `{'loss': 0.2, 'accuracy': 0.7}`. |

<br />

### `on_predict_batch_begin`

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

    on_predict_batch_begin(
        batch, logs=None
    )

Called at the beginning of a batch in `predict` methods.

Subclasses should override for any actions to run.

Note that if the `steps_per_execution` argument to `compile` in
[`tf.keras.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model) is set to `N`, this method will only be called every
`N` batches.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch` | Integer, index of batch within the current epoch. |
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_predict_batch_end`

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

    on_predict_batch_end(
        batch, logs=None
    )

Called at the end of a batch in `predict` methods.

Subclasses should override for any actions to run.

Note that if the `steps_per_execution` argument to `compile` in
[`tf.keras.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model) is set to `N`, this method will only be called every
`N` batches.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch` | Integer, index of batch within the current epoch. |
| `logs` | Dict. Aggregated metric results up until this batch. |

<br />

### `on_predict_begin`

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

    on_predict_begin(
        logs=None
    )

Called at the beginning of prediction.

Subclasses should override for any actions to run.

<br />

<br />

<br />

| Args ||
|---|---|
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_predict_end`

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

    on_predict_end(
        logs=None
    )

Called at the end of prediction.

Subclasses should override for any actions to run.

<br />

<br />

<br />

| Args ||
|---|---|
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_test_batch_begin`

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

    on_test_batch_begin(
        batch, logs=None
    )

Called at the beginning of a batch in `evaluate` methods.

Also called at the beginning of a validation batch in the `fit`
methods, if validation data is provided.

Subclasses should override for any actions to run.

Note that if the `steps_per_execution` argument to `compile` in
[`tf.keras.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model) is set to `N`, this method will only be called every
`N` batches.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch` | Integer, index of batch within the current epoch. |
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_test_batch_end`

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

    on_test_batch_end(
        batch, logs=None
    )

Called at the end of a batch in `evaluate` methods.

Also called at the end of a validation batch in the `fit`
methods, if validation data is provided.

Subclasses should override for any actions to run.

Note that if the `steps_per_execution` argument to `compile` in
[`tf.keras.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model) is set to `N`, this method will only be called every
`N` batches.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch` | Integer, index of batch within the current epoch. |
| `logs` | Dict. Aggregated metric results up until this batch. |

<br />

### `on_test_begin`

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

    on_test_begin(
        logs=None
    )

Called at the beginning of evaluation or validation.

Subclasses should override for any actions to run.

<br />

<br />

<br />

| Args ||
|---|---|
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_test_end`

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

    on_test_end(
        logs=None
    )

Called at the end of evaluation or validation.

Subclasses should override for any actions to run.

<br />

<br />

<br />

| Args ||
|---|---|
| `logs` | Dict. Currently the output of the last call to `on_test_batch_end()` is passed to this argument for this method but that may change in the future. |

<br />

### `on_train_batch_begin`

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

    on_train_batch_begin(
        batch, logs=None
    )

Called at the beginning of a training batch in `fit` methods.

Subclasses should override for any actions to run.

Note that if the `steps_per_execution` argument to `compile` in
[`tf.keras.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model) is set to `N`, this method will only be called every
`N` batches.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch` | Integer, index of batch within the current epoch. |
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_train_batch_end`

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

    on_train_batch_end(
        batch, logs=None
    )

Called at the end of a training batch in `fit` methods.

Subclasses should override for any actions to run.

Note that if the `steps_per_execution` argument to `compile` in
[`tf.keras.Model`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/Model) is set to `N`, this method will only be called every
`N` batches.

<br />

<br />

<br />

| Args ||
|---|---|
| `batch` | Integer, index of batch within the current epoch. |
| `logs` | Dict. Aggregated metric results up until this batch. |

<br />

### `on_train_begin`

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

    on_train_begin(
        logs=None
    )

Called at the beginning of training.

Subclasses should override for any actions to run.

<br />

<br />

<br />

| Args ||
|---|---|
| `logs` | Dict. Currently no data is passed to this argument for this method but that may change in the future. |

<br />

### `on_train_end`

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

    on_train_end(
        logs=None
    )

Called at the end of training.

Subclasses should override for any actions to run.

<br />

<br />

<br />

| Args ||
|---|---|
| `logs` | Dict. Currently the output of the last call to `on_epoch_end()` is passed to this argument for this method but that may change in the future. |

<br />

### `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
    )