# tf.keras.optimizers.Adam

<br />

|---|---|
| [![](https://www.tensorflow.org/images/tf_logo_32px.png) TensorFlow 1 version](https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/optimizers/Adam) | [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/adam.py#L32-L271) |

Optimizer that implements the Adam algorithm.

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

#### View aliases


**Main aliases**

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

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

[`tf.compat.v1.keras.optimizers.Adam`](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adam)

<br />

    tf.keras.optimizers.Adam(
        learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False,
        name='Adam', **kwargs
    )

Adam optimization is a stochastic gradient descent method that is based on
adaptive estimation of first-order and second-order moments.
According to the paper
[Adam: A Method for Stochastic Optimization. Kingma et al.,
2014](http://arxiv.org/abs/1412.6980),
the method is "*computationally efficient, has little memory
requirement, invariant to diagonal rescaling of gradients, and is well suited
for problems that are large in terms of data/parameters*".

For AMSGrad see [On The Convergence Of Adam And Beyond.
Reddi et al., 5-8](https://openreview.net/pdf?id=ryQu7f-RZ).

<br />

<br />

<br />

| ## Args ||
|---|---|
| `learning_rate` | A Tensor or a floating point value. The learning rate. |
| `beta_1` | A float value or a constant float tensor. The exponential decay rate for the 1st moment estimates. |
| `beta_2` | A float value or a constant float tensor. The exponential decay rate for the 2nd moment estimates. |
| `epsilon` | A small constant for numerical stability. This epsilon is "epsilon hat" in the Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm 1 of the paper. |
| `amsgrad` | boolean. Whether to apply AMSGrad variant of this algorithm from the paper "On the Convergence of Adam and beyond". |
| `name` | Optional name for the operations created when applying gradients. Defaults to "Adam". @compatibility(eager) When eager execution is enabled, `learning_rate`, `beta_1`, `beta_2`, and `epsilon` can each be a callable that takes no arguments and returns the actual value to use. This can be useful for changing these values across different invocations of optimizer functions. @end_compatibility |
| `**kwargs` | keyword arguments. Allowed to be {`clipnorm`, `clipvalue`, `lr`, `decay`}. `clipnorm` is clip gradients by norm; `clipvalue` is clip gradients by value, `decay` is included for backward compatibility to allow time inverse decay of learning rate. `lr` is included for backward compatibility, recommended to use `learning_rate` instead. |

<br />

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `iterations` | Variable. The number of training steps this Optimizer has run. |
| `weights` | Returns variables of this Optimizer based on the order created. |

<br />

## Methods

### `add_slot`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L567-L594)

    add_slot(
        var, slot_name, initializer='zeros'
    )

Add a new slot variable for `var`.

### `add_weight`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L768-L808)

    add_weight(
        name, shape, dtype=None, initializer='zeros', trainable=None,
        synchronization=tf.VariableSynchronization.AUTO,
        aggregation=tf.compat.v1.VariableAggregation.NONE
    )

### `apply_gradients`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L408-L441)

    apply_gradients(
        grads_and_vars, name=None
    )

Apply gradients to variables.

This is the second part of `minimize()`. It returns an `Operation` that
applies gradients.

<br />

<br />

<br />

| Args ||
|---|---|
| `grads_and_vars` | List of (gradient, variable) pairs. |
| `name` | Optional name for the returned operation. Default to the name passed to the `Optimizer` constructor. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| An `Operation` that applies the specified gradients. If `global_step` was not None, that operation also increments `global_step`. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `TypeError` | If `grads_and_vars` is malformed. |
| `ValueError` | If none of the variables have gradients. |

<br />

### `from_config`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L698-L721)

    @classmethod
    from_config(
        config, custom_objects=None
    )

Creates an optimizer from its config.

This method is the reverse of `get_config`,
capable of instantiating the same optimizer from the config
dictionary.

<br />

<br />

<br />

| Arguments ||
|---|---|
| `config` | A Python dictionary, typically the output of get_config. |
| `custom_objects` | A Python dictionary mapping names to additional Python objects used to create this optimizer, such as a function used for a hyperparameter. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| An optimizer instance. ||

<br />

### `get_config`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/adam.py#L261-L271)

    get_config()

Returns the config of the optimimizer.

An optimizer config is a Python dictionary (serializable)
containing the configuration of an optimizer.
The same optimizer can be reinstantiated later
(without any saved state) from this configuration.

<br />

<br />

<br />

| Returns ||
|---|---|
| Python dictionary. ||

<br />

### `get_gradients`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L374-L406)

    get_gradients(
        loss, params
    )

Returns gradients of `loss` with respect to `params`.

<br />

<br />

<br />

| Arguments ||
|---|---|
| `loss` | Loss tensor. |
| `params` | List of variables. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| List of gradient tensors. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | In case any gradient cannot be computed (e.g. if gradient function not implemented). |

<br />

### `get_slot`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L596-L599)

    get_slot(
        var, slot_name
    )

### `get_slot_names`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L563-L565)

    get_slot_names()

A list of names for this optimizer's slots.

### `get_updates`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L499-L506)

    get_updates(
        loss, params
    )

### `get_weights`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L743-L745)

    get_weights()

### `minimize`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L290-L319)

    minimize(
        loss, var_list, grad_loss=None, name=None
    )

Minimize `loss` by updating `var_list`.

This method simply computes gradient using [`tf.GradientTape`](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/GradientTape) and calls
`apply_gradients()`. If you want to process the gradient before applying
then call [`tf.GradientTape`](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/GradientTape) and `apply_gradients()` explicitly instead
of using this function.

<br />

<br />

<br />

| Args ||
|---|---|
| `loss` | A callable taking no arguments which returns the value to minimize. |
| `var_list` | list or tuple of `Variable` objects to update to minimize `loss`, or a callable returning the list or tuple of `Variable` objects. Use callable when the variable list would otherwise be incomplete before `minimize` since the variables are created at the first time `loss` is called. |
| `grad_loss` | Optional. A `Tensor` holding the gradient computed for `loss`. |
| `name` | Optional name for the returned operation. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| An Operation that updates the variables in `var_list`. If `global_step` was not `None`, that operation also increments `global_step`. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | If some of the variables are not `Variable` objects. |

<br />

### `set_weights`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/adam.py#L174-L182)

    set_weights(
        weights
    )

### `variables`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L734-L736)

    variables()

Returns variables of this Optimizer based on the order created.