# tf.keras.optimizers.schedules.InverseTimeDecay

<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#L470-L575) |

A LearningRateSchedule that uses an inverse time 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.InverseTimeDecay`](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/schedules/InverseTimeDecay)
**Compat aliases for migration**

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

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

<br />

    tf.keras.optimizers.schedules.InverseTimeDecay(
        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 the inverse decay function
to an optimizer step, given a provided initial learning rate.
It requires a `step` value to compute the decayed learning rate. You can
just pass a TensorFlow variable that you increment at each training step.

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 / (1 + decay_rate * step / decay_step)

or, if `staircase` is `True`, as:

    def decayed_learning_rate(step):
      return initial_learning_rate / (1 + decay_rate * floor(step / decay_step))

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: Fit a Keras model when decaying 1/t with a rate of 0.5:

    ...
    initial_learning_rate = 0.1
    decay_steps = 1.0
    decay_rate = 0.5
    learning_rate_fn = keras.optimizers.schedules.InverseTimeDecay(
      initial_learning_rate, decay_steps, decay_rate)

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

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

<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` | How often to apply decay. |
| `decay_rate` | A Python number. The decay rate. |
| `staircase` | Whether to apply decay in a discrete staircase, as opposed to continuous, fashion. |
| `name` | String. Optional name of the operation. Defaults to 'InverseTimeDecay'. |

<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#L568-L575)

    get_config()

### `__call__`

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

    __call__(
        step
    )

Call self as a function.