我对张量流中优化器的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)
)
感谢您的帮助!
答案 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()
使用此功能的说明。
所以要回答这个问题,是的,它们是相同的。