张量流

时间:2017-08-03 02:10:34

标签: tensorflow

我对张量流中优化器的apply_gradientsminimize之间的区别感到困惑。例如,

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:15)

您可以通过链接轻松了解:https://www.tensorflow.org/get_started/get_started (tf.train API部分)他们实际上做同样的工作。 区别在于:如果使用分离的函数(tf.gradients,tf.apply_gradients),则可以在它们之间应用其他机制,例如渐变裁剪。

答案 1 :(得分:2)

here它说:

  

此方法(minimize)简单地组合了调用compute_gradients()和   apply_gradients()。如果要在应用之前处理渐变   他们改为显式调用compute_gradients()apply_gradients()   使用此功能的说明。

所以要回答这个问题,是的,它们是相同的。