训练模型
在TF里提供了一些类和函数来帮助训练神经网络模型,主要的类就是优化器类,它提供一个基类的接口,让外面使用所有优化器算法达到统一,因此,优化器是接口类,你不能实例化它,只能从它的派生类来进行实例化。优化器主提供一些计算梯度损失函数和应用梯度到变量,以及提供优化的算法,比如像梯度下降算法(gradient descent,即随机梯度下降)和Adagrad(一个基于梯度优化的算法)。
class tf.train.Optimizer
优化器的基类。定义训练模式的操作方式,因为这个类是抽象基类,不要实例化它,需要使用它的派生类:GradientDescentOptimizer, AdagradOptimizer, 或 MomentumOptimizer。
用法:
# 用指定参数来创建优化器.
opt = GradientDescentOptimizer(learning_rate=0.1)
# 设置图里的最小化损失函数的操作方式。
# 损失函数是一个张量,要操作的变量列表就是在tf.Variable对象里。.
opt_op = opt.minimize(cost, var_list=<变量列表>)
接着下来使用opt_op来进行训练一步的操作如下:
opt_op.run()
在应用梯度结果之前处理梯度参数
常常对于简单的应用,只需要调用minimize()函数就可以实现计算梯度参数,并且立即应用这些参数到变量里,但是有时候需要计算出来梯度参数之后,进行某种处理,那么就需要按下面三个步骤来进行:
1、调用函数compute_gradients()来计算梯度。
2、按你的要求来处理梯度。
3、调用函数apply_gradients()来应用梯度。
例如:
# 创建优化器
opt = GradientDescentOptimizer(learning_rate=0.1)
# 计算变量列表的梯度
grads_and_vars = opt.compute_gradients(loss, <list of variables>)
# 梯度grads_and_vars是一个元组 tuples (gradient, variable).
# 如果只想使用梯度部分,可以使用像下面这样使用它。
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]
# 再调用优化器来应用已经修改过的梯度数据.
opt.apply_gradients(capped_grads_and_vars)