Na maioria dos códigos de fluxo de tensão, o Adam Optimizer é usado com uma taxa de aprendizado constante de 1e-4
(ou seja, 0,0001). O código geralmente tem a seguinte aparência:
...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)
Gostaria de saber se é útil usar decaimento exponencial ao usar o adam optimizer, ou seja, use o seguinte 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)
Geralmente, as pessoas usam algum tipo de redução da taxa de aprendizado, para Adam parece incomum. Existe alguma razão teórica para isso? Pode ser útil combinar o Adam otimizer com a deterioração?
global_step
parâmetro de minimize
. Veja editar.
1e-4
= 0.0001
, não 0.0004
.