如何使用 GradientDescentOptimizer 计算 grads_and_vars
How to compute grads_and_vars with GradientDescentOptimizer
我有以下 CNN 代码实现。
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate).minimize(loss = cnn.loss, global_step=global_step)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
使用它,我得到以下错误:
grads_and_vars = optimizer.compute_gradients(cnn.loss)
AttributeError: 'Operation' object has no attribute 'compute_gradients'
我注意到将上面的 GradientDescentOptimizer 实现与 tf.train.exponential_decay 一起使用不提供属性 'compute_gradients'
对于优化器。
有人可以帮我解决这个问题吗?
compute_gradients
和apply_gradients
都是tf.train.GradientDescentOptimizer
class的方法。
问题是您将优化器定义为步骤。您应该删除 minimize
调用,如下所示:
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
它应该可以工作。
但是,如果您没有对梯度进行任何特定使用,您确实可以使用 .minimize(...)
直接定义训练步骤,类似于您的 train_op
:
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
train_op = optimizer.minimize(loss=cnn.loss, global_step=global_step)
进一步解释 apply_gradients
的工作原理 。
随意查看tensorflow中optimizer.py的源码(路径:/tensorflow/tensorflow/python/training/optimizer.py),你就会得到答案。
代码片段,即第365行到第423行是.minimize()
函数的实现。别担心,这些大部分都是笔记。实际上,它同时执行 .compute_gradients()
和 .apply_gradients()
。所以如果你想单独调用 .compute_gradients()
,你必须确保变量是 tf.train.GradientDescentOptimizer()
.
的实例
我有以下 CNN 代码实现。
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate).minimize(loss = cnn.loss, global_step=global_step)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
使用它,我得到以下错误:
grads_and_vars = optimizer.compute_gradients(cnn.loss)
AttributeError: 'Operation' object has no attribute 'compute_gradients'
我注意到将上面的 GradientDescentOptimizer 实现与 tf.train.exponential_decay 一起使用不提供属性 'compute_gradients' 对于优化器。
有人可以帮我解决这个问题吗?
compute_gradients
和apply_gradients
都是tf.train.GradientDescentOptimizer
class的方法。
问题是您将优化器定义为步骤。您应该删除 minimize
调用,如下所示:
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
它应该可以工作。
但是,如果您没有对梯度进行任何特定使用,您确实可以使用 .minimize(...)
直接定义训练步骤,类似于您的 train_op
:
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
train_op = optimizer.minimize(loss=cnn.loss, global_step=global_step)
进一步解释 apply_gradients
的工作原理
随意查看tensorflow中optimizer.py的源码(路径:/tensorflow/tensorflow/python/training/optimizer.py),你就会得到答案。
代码片段,即第365行到第423行是.minimize()
函数的实现。别担心,这些大部分都是笔记。实际上,它同时执行 .compute_gradients()
和 .apply_gradients()
。所以如果你想单独调用 .compute_gradients()
,你必须确保变量是 tf.train.GradientDescentOptimizer()
.