今天用Tensor跑手写数字识别的时候遇见这样一个错误:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimizer(loss)
AttributeError: 'GradientDescentOptimizer' object has no attribute 'minimizer'
看错误提示是说GradientDescentOptimizer
这个类没有minimizer
这个属性。
OK,先去搜索一下,发现百度上没有书的人文章。
那就看一下GradientDescentOptimizer
这个类的源码吧,它的源码是这样的:
class GradientDescentOptimizer(optimizer.Optimizer):
def __init__(self, learning_rate, use_locking=False, name="GradientDescent"):
super(GradientDescentOptimizer, self).__init__(use_locking, name)
self._learning_rate = learning_rate
def _apply_dense(self, grad, var):
def _resource_apply_dense(self, grad, handle):
def _resource_apply_sparse_duplicate_indices(self, grad, handle, indices):
def _apply_sparse_duplicate_indices(self, grad, var):
def _prepare(self):
我们可以发现这个类里确实没有minimizer
这个属性,怎么办呢?
我们可以发现GradientDescentOptimizer
继承自optimizer.Optimizer
这个类,那么就去这个类里看看吧
我们可以发现这个类有如下的属性和方法:
class Optimizer(object):
GATE_NONE = 0
GATE_OP = 1
GATE_GRAPH = 2
def __init__(self, use_locking, name):
def get_name(self):
def minimize(self, loss, global_step=None, var_list=None,
gate_gradients=GATE_OP, aggregation_method=None,
colocate_gradients_with_ops=False, name=None,
grad_loss=None):
def compute_gradients(self, loss, var_list=None,
gate_gradients=GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=False,
grad_loss=None):
可以发现这个类中的一个minimize
方法与minimizer
非常类似,这个时候基本上就可以确定是我们多写了个’r’,
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)
OK,修改过后我们可以发现程序是正常的: