22 votes

Différence entre `apply_gradients` et `minimize` de l'optimiseur dans tensorflow

Je ne sais pas quelle est la différence entre apply_gradients y minimize de l'optimiseur dans tensorflow. Par exemple,

optimizer = tf.train.AdamOptimizer(1e-3)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)

et

optimizer = tf.train.AdamOptimizer(1e-3)
train_op = optimizer.minimize(cnn.loss, global_step=global_step)

Sont-ils les mêmes en effet ?

Si je veux diminuer le taux d'apprentissage, puis-je utiliser les codes suivants ?

global_step = tf.Variable(0, name="global_step", trainable=False)
starter_learning_rate = 1e-3
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
                                       100, FLAGS.decay_rate, staircase=True)
# Passing global_step to minimize() will increment it at each step.
learning_step = (
    optimizer = tf.train.AdamOptimizer(learning_rate)
    grads_and_vars = optimizer.compute_gradients(cnn.loss)
    train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
)

Merci pour votre aide !

15voto

Yanghoon Kim Points 313

Vous pouvez facilement le savoir en consultant le lien : https://www.tensorflow.org/get_started/get_started (partie API de tf.train) qu'elles font en fait le même travail. La différence est la suivante : si vous utilisez les fonctions séparées ( tf.gradients, tf.apply_gradients), vous pouvez appliquer d'autres mécanismes entre elles, comme le découpage des gradients.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X