如何使用GradientDescentOptimizer计算grads_and_vars

时间:2017-11-15 12:48:47

标签: 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=global_step)

使用它,我收到以下错误:

grads_and_vars = optimizer.compute_gradients(cnn.loss)
AttributeError: 'Operation' object has no attribute 'compute_gradients'

我注意到在tf.train.exponential_decay上使用上面的GradientDescentOptimizer实现并没有提供属性' compute_gradients'  对于优化器。

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

compute_gradientsapply_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(...)直接定义训练步骤,类似于train_op

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

有关apply_gradients如何运作的进一步说明here

答案 1 :(得分:0)

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

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