我有以下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' 对于优化器。
有人可以帮我这个吗?
答案 0 :(得分:1)
compute_gradients
和apply_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()
的实例。