En la mayoría del código de Tensorflow que he visto se utiliza Adam Optimizer con una tasa de aprendizaje constante de 1e-4
(es decir, 0,0001). El código suele tener 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 utilizar el decaimiento exponencial cuando se utiliza el optimizador adam, es decir, utilizar 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, la gente utiliza algún tipo de decaimiento de la tasa de aprendizaje, para Adán parece poco común. ¿Hay alguna razón teórica para ello? ¿Puede ser útil combinar el optimizador Adam con el decaimiento?