Разница между "apply_gradients" и "минимизацией" оптимизатора в тензорном потоке

Я запутался в разнице между apply_gradients и minimize оптимизатора в тензорном потоке. Например,

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)

а также

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

Они действительно одинаковы?

Если я хочу уменьшить скорость обучения, могу ли я использовать следующие коды?

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)
)

Спасибо за вашу помощь!

Ответ 1

Вы можете легко узнать по ссылке: https://www.tensorflow.org/get_started/get_started (часть API tf.train), что они фактически выполняют ту же работу. Разница в том, что: если вы используете отделенные функции (tf.gradients, tf.apply_gradients), вы можете применить к ним другой механизм, например, обрезку градиента.

Ответ 2

здесь там написано:

Этот метод просто (minimize) объединяет вызовы compute_gradients() и apply_gradients(). Если вы хотите обработать градиент перед применением вместо этого они явно называют compute_gradients() и apply_gradients() использования этой функции.

Так что, чтобы ответить на вопрос, да, они одинаковы.