# tf.keras.optimizers.schedules.PiecewiseConstantDecay

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/keras-team/keras/tree/v2.14.0/keras/optimizers/schedules/learning_rate_schedule.py#L209-L314) |

A LearningRateSchedule that uses a piecewise constant decay schedule.

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

#### View aliases


**Main aliases**

[`tf.optimizers.schedules.PiecewiseConstantDecay`](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/schedules/PiecewiseConstantDecay)

<br />

    tf.keras.optimizers.schedules.PiecewiseConstantDecay(
        boundaries, values, name=None
    )

The function returns a 1-arg callable to compute the piecewise constant
when passed the current optimizer step. This can be useful for changing the
learning rate value across different invocations of optimizer functions.

Example: use a learning rate that's 1.0 for the first 100001 steps, 0.5
for the next 10000 steps, and 0.1 for any additional steps.

    step = tf.Variable(0, trainable=False)
    boundaries = [100000, 110000]
    values = [1.0, 0.5, 0.1]
    learning_rate_fn = keras.optimizers.schedules.PiecewiseConstantDecay(
        boundaries, values)

    # Later, whenever we perform an optimization step, we pass in the step.
    learning_rate = learning_rate_fn(step)

You can pass this schedule directly into a [`tf.keras.optimizers.Optimizer`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/optimizers/Optimizer)
as the learning rate. The learning rate schedule is also serializable and
deserializable using [`tf.keras.optimizers.schedules.serialize`](https://www.tensorflow.org/versions/r2.14/api_docs/python/tf/keras/optimizers/schedules/serialize) and
[`tf.keras.optimizers.schedules.deserialize`](https://www.tensorflow.org/versions/r2.14/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 the boundary tensors. <br /> The output of the 1-arg function that takes the `step` is `values[0]` when `step <= boundaries[0]`, `values[1]` when `step > boundaries[0]` and `step <= boundaries[1]`, ..., and values\[-1\] when `step > boundaries[-1]`. ||

<br />

<br />

<br />

<br />

| ## Args ||
|---|---|
| `boundaries` | A list of `Tensor`s or `int`s or `float`s with strictly increasing entries, and with all elements having the same type as the optimizer step. |
| `values` | A list of `Tensor`s or `float`s or `int`s that specifies the values for the intervals defined by `boundaries`. It should have one more element than `boundaries`, and all elements should have the same type. |
| `name` | A string. Optional name of the operation. Defaults to 'PiecewiseConstant'. |

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `ValueError` | if the number of elements in the lists do not match. |

<br />

## Methods

### `from_config`

[View source](https://github.com/keras-team/keras/tree/v2.14.0/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.14.0/keras/optimizers/schedules/learning_rate_schedule.py#L309-L314)

    get_config()

### `__call__`

[View source](https://github.com/keras-team/keras/tree/v2.14.0/keras/optimizers/schedules/learning_rate_schedule.py#L278-L307)

    __call__(
        step
    )

Call self as a function.