Nella maggior parte del codice Tensorflow ho visto Adam Optimizer utilizzato con un tasso di apprendimento costante di 1e-4
(cioè 0,0001). Il codice di solito ha il seguente aspetto:
...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)
Mi chiedo se sia utile utilizzare il decadimento esponenziale quando si utilizza Adam Optimizer, ovvero utilizzare il seguente codice:
...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)
Di solito, le persone usano un qualche tipo di decadimento del tasso di apprendimento, per Adam sembra raro. C'è qualche motivo teorico per questo? Può essere utile combinare l'ottimizzatore Adam con il decadimento?
global_step
parametro di minimize
. Vedi modifica.
1e-4
= 0.0001
, no 0.0004
.