# tf.keras.optimizers.schedules.ExponentialDecay

<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/optimizers/schedules/learning_rate_schedule.py#L101-L206) |

A LearningRateSchedule that uses an exponential decay schedule.

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

#### View aliases


**Main aliases**

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

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

\`tf.compat.v1.keras.optimizers.schedules.ExponentialDecay\`

<br />

    tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate, decay_steps, decay_rate, staircase=False, name=None
    )

When training a model, it is often useful to lower the learning rate as
the training progresses. This schedule applies an exponential decay function
to an optimizer step, given a provided initial learning rate.

The schedule is a 1-arg callable that produces a decayed learning
rate when passed the current optimizer step. This can be useful for changing
the learning rate value across different invocations of optimizer functions.
It is computed as:

    def decayed_learning_rate(step):
      return initial_learning_rate * decay_rate ^ (step / decay_steps)

If the argument `staircase` is `True`, then `step / decay_steps` is
an integer division and the decayed learning rate follows a
staircase function.

You can pass this schedule directly into a [`tf.keras.optimizers.Optimizer`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/optimizers/Optimizer)
as the learning rate.
Example: When fitting a Keras model, decay every 100000 steps with a base
of 0.96:

    initial_learning_rate = 0.1
    lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate,
        decay_steps=100000,
        decay_rate=0.96,
        staircase=True)

    model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=lr_schedule),
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])

    model.fit(data, labels, epochs=5)

The learning rate schedule is also serializable and deserializable using
[`tf.keras.optimizers.schedules.serialize`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/optimizers/schedules/serialize) and
[`tf.keras.optimizers.schedules.deserialize`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/keras/optimizers/schedules/deserialize).

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A 1-arg callable learning rate schedule that takes the current optimizer step and outputs the decayed learning rate, a scalar `Tensor` of the same type as `initial_learning_rate`. ||

<br />

<br />

<br />

<br />

| ## Args ||
|---|---|
| `initial_learning_rate` | A scalar `float32` or `float64` `Tensor` or a Python number. The initial learning rate. |
| `decay_steps` | A scalar `int32` or `int64` `Tensor` or a Python number. Must be positive. See the decay computation above. |
| `decay_rate` | A scalar `float32` or `float64` `Tensor` or a Python number. The decay rate. |
| `staircase` | Boolean. If `True` decay the learning rate at discrete intervals |
| `name` | String. Optional name of the operation. Defaults to 'ExponentialDecay'. |

<br />

## Methods

### `from_config`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/optimizers/schedules/learning_rate_schedule.py#L88-L98)

    @classmethod
    from_config(
        config
    )

Instantiates a `LearningRateSchedule` from its config.

<br />

<br />

<br />

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

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A `LearningRateSchedule` instance. ||

<br />

### `get_config`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/optimizers/schedules/learning_rate_schedule.py#L199-L206)

    get_config()

### `__call__`

[View source](https://github.com/keras-team/keras/tree/v2.13.1/keras/optimizers/schedules/learning_rate_schedule.py#L182-L197)

    __call__(
        step
    )

Call self as a function.