tf.train.Optimizer.__init__(use_locking, name)
优化器的构造函数,用来创建一个新的优化器。
参数:
use_locking: 布尔类型Bool.如果设置为真可以防止别的异步操作更新这些变量。
name: 非空字符串。优化器的名称。
异常:
ValueError: 如果名称错误抛出此异常.
tf.train.Optimizer.minimize(loss, global_step=None, var_list=None, gate_gradients=1, aggregation_method=None, colocate_gradients_with_ops=False, name=None, grad_loss=None)
调用函数计算梯度让损失函数最小化,同时更新梯度到变量列表。
这个函数简单地组合函数compute_gradients()和apply_gradients()的功能,如果你想分离处理这个过程,需要分开调用这两个函数。
参数:
loss: 一个包含计算最小化的张量。
global_step: 可选,当变量更新一个之后增加一步。
var_list: 用来计算损失函数的变量列表,可选类型,默认是使用 GraphKeys.TRAINABLE_VARIABLES里的变量.
gate_gradients: 计算梯度的方式: GATE_NONE, GATE_OP, or GATE_GRAPH.
aggregation_method: 指定组合计算梯度的参数,在类AggregationMethod里有效.
colocate_gradients_with_ops: 如果设置为True,尽量使用相应的op来计算相应梯度。
name: 可选,本操作的名称。
grad_loss: 可选,保存损失函数计算出来的梯度值。
返回:
定义一个操作来更新变量列表。如果global_step非None时,也许会多增加global_step操作.
异常:
ValueError: 如果变量不是有效的对象时抛出异常。
tf.train.Optimizer.compute_gradients(loss, var_list=None, gate_gradients=1, aggregation_method=None, colocate_gradients_with_ops=False, grad_loss=None)
从变量列表var_list里计算梯度的损失值.
它是minimize()函数第一部分调用的函数,返回 (gradient, variable)元组的列表,表示变量对应的梯度。值得注意是这里的梯度可能是张量,或者IndexedSlices,或者当没有梯度时是None值。.
参数:
loss: 包含计算最优化的张量。
var_list: 可选,用来计算最优化的变量列表.默认是使用图集里的GraphKey.TRAINABLE_VARIABLES变量列表.
gate_gradients: 计算梯度的方式: GATE_NONE, GATE_OP, or GATE_GRAPH。
aggregation_method: 指定组合计算梯度的参数,在类AggregationMethod里有效.
colocate_gradients_with_ops: 如果设置为True,尽量使用相应的op来计算相应梯度。
grad_loss: 可选,保存损失函数计算出来的梯度值。
返回值:
返回元组(gradient, variable)对的列表. Variable问题存在的,但gradient梯度就有可能为空 None.
异常:
TypeError: 如果var_list列表包括非变量对象时。
ValueError: 如果一些参数设置无效。
tf.train.Optimizer.apply_gradients(grads_and_vars, global_step=None, name=None)
应用梯度到变量。
这是函数minimize()的第二部分内容.它返回一个应用梯度的操作。
参数:
grads_and_vars:梯度列表 (gradient, variable),它是从函数compute_gradients()返回.
global_step: 可选,当变量更新之后增加1.
name: 可选名称,定义操作的名称,默认是构造优化器的名称。
返回值:
应用梯度到变量的操作。
异常:
TypeError: 如果grads_and_vars 出错.
ValueError: 如果有梯度出现空值。
梯度传送方式
函数minimize()和compute_gradients()都 接受一个参数gate_gradients来控制梯度的传送方式,主要指它的并行传送的方式。
主要有以下三种方式:GATE_NONE, GATE_OP,和 GATE_GRAPH.
GATE_NONE: 计算和应用梯度是完全并行的,提供了最大的并行性。
GATE_OP: 每一个操作之前都确认梯度计算完成才执行下一个操作,这样可以防止相互之间有依赖性的梯度计算。
GATE_GRAPH: 在应用梯度之前必须计算完成所有梯度,这样并行性是最差的方式,不过这种方式可以确保你在使用所有梯度时都是计算完成的。
跟踪点
有一些优化器MomentumOptimizer 和 AdagradOptimizer会分配和管理一些额外的变量,这些变量用来跟踪训练过程的。因此把这些跟踪训练过程的变量叫做跟踪点,这些跟踪点定义有名称,可以从这些优化器里获取这些名称,并且使用它,把它打印出来,这对于调试训练过程的算法是非常有用的。
tf.train.Optimizer.get_slot_names()
返回优化器创建跟踪点的名称。
返回值:
一个字符串列表。
tf.train.Optimizer.get_slot(var, name)
查看名称name的跟踪点。
有一些优化器会添加变量,比如Momentum和Adagrad优化器使用变量来加速累加。如果你需要使用,可以通过名称来访问这些变量。
参数:
var: 传送给函数minimize() 或 apply_gradients()的变量.
name: 字符串对象.
返回值:
从名称查找到跟踪点返回,如果没有返回None.
其它方法:tf.train.Optimizer.get_name()
class tf.train.GradientDescentOptimizer
实现了一个梯度下降算法的优化器。
tf.train.GradientDescentOptimizer.__init__(learning_rate, use_locking=False, name='GradientDescent')
构造函数,用来构造一个梯度下降算法的优化器。
参数:
learning_rate: 一个张量或者浮点数,表示学习的速率。
use_locking: 如果为True使用锁来锁住后进行更新操作。
name: 操作过程的名称,默认是"GradientDescent"。
tf.global_variables_initializer()
返回一个初始化全局变量的操作。它的内部实现是简单调用 variable_initializers(global_variables())实现。
返回值:
在图里初始化全局变量的操作。