我感到困惑之间的差异apply_gradients,并minimize在tensorflow优化的.例如,
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)
Run Code Online (Sandbox Code Playgroud)
和
optimizer = tf.train.AdamOptimizer(1e-3)
train_op = optimizer.minimize(cnn.loss, global_step=global_step)
Run Code Online (Sandbox Code Playgroud)
他们确实一样吗?
如果我想降低学习率,我可以使用以下代码吗?
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)
)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
这里它说minimize使用tf.GradienTape然后apply_gradients:
通过更新 var_list 将损失降至最低。
此方法只是使用 tf.GradientTape 计算梯度并调用 apply_gradients()。如果您想在应用之前处理渐变,请显式调用 tf.GradientTape 和 apply_gradients() 而不是使用此函数。
所以minimize实际上使用apply_gradients就像:
def minimize(self, loss, var_list, grad_loss=None, name=None, tape=None):
grads_and_vars = self._compute_gradients(loss, var_list=var_list, grad_loss=grad_loss, tape=tape)
return self.apply_gradients(grads_and_vars, name=name)
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您使用compute_gradientsand apply_gradients,这确实是有效的,但现在compute_gradients已被设为私有,因此不是使用它的好习惯。因此,该函数不再出现在文档中。
| 归档时间: |
|
| 查看次数: |
8536 次 |
| 最近记录: |