En la mayoría de los códigos de Tensorflow, he visto que Adam Optimizer se usa con una tasa de aprendizaje constante de 1e-4
(es decir, 0,0001). El código generalmente tiene el siguiente aspecto:
...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
Me pregunto si es útil usar la disminución exponencial cuando se usa el optimizador Adam, es decir, usar el siguiente código:
...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
Por lo general, las personas usan algún tipo de disminución de la tasa de aprendizaje, para Adam parece poco común. ¿Hay alguna razón teórica para esto? ¿Puede ser útil combinar el optimizador Adam con la descomposición?
global_step
parámetro de minimize
. Ver editar.
1e-4
= 0.0001
no 0.0004
.