Tensorflow 如何使用GradientDescentOptimizer计算梯度和变量

Tensorflow 如何使用GradientDescentOptimizer计算梯度和变量,tensorflow,deep-learning,conv-neural-network,gradient-descent,Tensorflow,Deep Learning,Conv Neural Network,Gradient Descent,我有下面的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=g

我有下面的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_detaction一起使用不会提供“compute_gradients”属性 对于优化器


有人能帮我吗?

计算梯度和应用梯度都是
tf.train.GradientDescentOptimizer
类的方法

问题是您将优化器定义为步骤。您应该删除
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(…)
来直接定义训练步骤,类似于您的
训练操作

optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
train_op = optimizer.minimize(loss=cnn.loss, global_step=global_step)

进一步解释如何应用梯度。

请随意查看tensorflow(路径:)中optimizer.py的源代码,您将得到答案

代码段,即从第365行到第423行是
.minimize()
函数的实现。别担心,大部分都是笔记。实际上,它同时执行
.compute_gradients()
.apply_gradients()
。因此,如果要单独调用
.compute_gradients()
,则必须确保该变量是
tf.train.GradientDescentOptimizer()
的实例