Ver fuente en GitHub

Optimizador que implementa el algoritmo de Adam.

Hereda de: Optimizer

Ver alias

Alias ​​principales

tf.optimizers.Adam

Alias ​​de compatibilidad para la migración

Ver Guía de migración para más detalles.

tf.compat.v1.keras.optimizers.Adam

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

La optimización de Adam es un método de descenso de gradiente estocástico que se basa en la estimación adaptativa de momentos de primer y segundo orden.

De acuerdo a Kingma et al., 2014el método es “computacionalmente eficiente, requiere poca memoria, es invariable al cambio de escala diagonal de gradientes y es adecuado para problemas que son grandes en términos de datos/parámetros“.

argumentos
learning_rate A Tensorvalor de punto flotante, o un programa que es un tf.keras.optimizers.schedules.LearningRateSchedule, o un invocable que no toma argumentos y devuelve el valor real a usar, la tasa de aprendizaje. El valor predeterminado es 0,001.
beta_1 Un valor flotante o un tensor flotante constante, o un invocable que no toma argumentos y devuelve el valor real para usar. La tasa de caída exponencial para las estimaciones del primer momento. El valor predeterminado es 0.9.
beta_2 Un valor flotante o un tensor flotante constante, o un invocable que no toma argumentos y devuelve el valor real para usar. La tasa de caída exponencial para las estimaciones del segundo momento. El valor predeterminado es 0,999.
epsilon Una pequeña constante para la estabilidad numérica. Este épsilon es “sombrero épsilon” en el artículo de Kingma y Ba (en la fórmula justo antes de la Sección 2.1), no el épsilon en el Algoritmo 1 del artículo. El valor predeterminado es 1e-7.
amsgrad booleano. Si aplicar la variante AMSGrad de este algoritmo del artículo “Sobre la convergencia de Adán y más allá”. Predeterminado a False.
name Nombre opcional para las operaciones creadas al aplicar degradados. Predeterminado a "Adam".
**kwargs Argumentos de palabras clave. permitido ser uno de "clipnorm" o "clipvalue". "clipnorm" (flotante) recorta gradientes por norma; "clipvalue" (flotante) recorta degradados por valor.

Uso:

opt = tf.keras.optimizers.Adam(learning_rate=0.1)
var1 = tf.Variable(10.0)
loss =lambda:(var1 **2)/2.0# d(loss)/d(var1) == var1
step_count = opt.minimize(loss,[var1]).numpy()# The first step is `-learning_rate*sign(grad)`
var1.numpy()9.9

Referencia:

Notas:

El valor predeterminado de 1e-7 para epsilon podría no ser un buen valor predeterminado en general. Por ejemplo, al entrenar una red Inception en ImageNet, una buena opción actual es 1.0 o 0.1. Tenga en cuenta que, dado que Adam usa la formulación justo antes de la Sección 2.1 del artículo de Kingma y Ba en lugar de la formulación del Algoritmo 1, el “épsilon” al que se hace referencia aquí es “sombrero de épsilon” en el artículo.

La escasa implementación de este algoritmo (utilizado cuando el degradado es un objeto IndexedSlices, generalmente debido a tf.gather o una búsqueda incrustada en el pase hacia adelante) aplica impulso a los cortes variables incluso si no se usaron en el pase hacia adelante (lo que significa que tienen un gradiente igual a cero). La caída de momento (beta1) también se aplica a todo el acumulador de momento. Esto significa que el comportamiento disperso es equivalente al comportamiento denso (a diferencia de algunas implementaciones de impulso que ignoran el impulso a menos que se haya utilizado una porción variable).

aumenta
ValueError en caso de cualquier argumento inválido.