IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]AI学习之路(17): TensorFlow优化器2

    caimouse发表于 2017-03-05 08:35:42
    love 0

    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())实现。

     

    返回值:

    在图里初始化全局变量的操作。


    1. C++标准模板库从入门到精通 

    http://edu.csdn.net/course/detail/3324

    2.跟老菜鸟学C++

    http://edu.csdn.net/course/detail/2901

    3. 跟老菜鸟学python

    http://edu.csdn.net/course/detail/2592

    4. 在VC2015里学会使用tinyxml库

    http://edu.csdn.net/course/detail/2590

    5. 在Windows下SVN的版本管理与实战 

     http://edu.csdn.net/course/detail/2579

    6.Visual Studio 2015开发C++程序的基本使用 

    http://edu.csdn.net/course/detail/2570

    7.在VC2015里使用protobuf协议

    http://edu.csdn.net/course/detail/2582

    8.在VC2015里学会使用MySQL数据库

    http://edu.csdn.net/course/detail/2672



沪ICP备19023445号-2号
友情链接