一般情况下,平常所说的训练神经网络指的都是使用框架里面体提供的优化器(也可以称作梯度下降函数)去降低loss值。梯度下降算法简单点理解就是让损失函数loss对神经网络内的参数进行求导(链式求导),通过不停地更新网络内的参数使得损失值loss沿着损失函数减小的方向移动,最终让损失值loss达到尽可能小的过程。
求解梯度下降的过程比较复杂难懂,并且梯度下降方法也有很多中,幸运的是TensorFlow中已经
将很多常用的梯度下降方法封装成了函数方法,用户不需要考虑手动编写梯度下降的具体过程即可实现梯度下降的目的。
1.train.Optimizer
这是一个基本的梯度下降类,这个类不会被直接调用,更多的是使用它的一些子类,比如AdagradOptimizer、GradientDescentOptimizer等。
这个类中的__init__()函数的定义为:
class Optimizer():
def __init__(self, use_locking, name):
"""Create a new Optimizer.
This must be called by the constructors of subclasses.
Args:
use_locking: Bool. If True apply use locks to prevent concurrent updates
to variables.
name: A non-empty string. The name to use for accumulators created
for the optimizer.
Raises:
ValueError: If name is malformed.
"""
对于一个具体的优化器类(Optimizer类的子类),通常会调用定义在Optimizer类中的minimize函数来指定最小化的目标。Optimizer类的minimize()函数原型为:
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):
"""Add operations to minimize `loss` by updating `var_list`.
This method simply combines calls `compute_gradients()` and
`apply_gradients()`. If you want to process the gradient before applying
them call `compute_gradients()` and `apply_gradients()` explicitly instead
of using this function."""
2.train.GradientDescentOptimizer()
train.GradientDescentOptimizer()是梯度下降优化器,实现了梯度下降算法,是Optimizer类的一个子类。
class GradientDescentOptimizer(optimizer.Optimizer):
"""Optimizer that implements the gradient descent algorithm.
"""
def __init__(self, learning_rate, use_locking=False, name