zoukankan      html  css  js  c++  java
  • 『TensorFlow』网络操作API_下

    一、优化器基类介绍

    标注一点,优化器中的学习率可以是tensor,这意味着它可以feed,

    learning_rate: A Tensor or a floating point value.

    正常使用流程:

    创建优化器对象 -> 指定最小化loss & 可优化参数 -> runminimize实际包含两个操作:首先计算梯度,然后更新可训练参数。

     非标准化操作:

    希望计算出梯度之后 - > 人工处理梯度 -> 优化参数,

    使用两个新的函数取代minimize:

     1 # 创建一个optimizer.
     2 opt = GradientDescentOptimizer(learning_rate=0.1)
     3 
     4 # 计算<list of variables>相关的梯度
     5 grads_and_vars = opt.compute_gradients(loss, <list of variables>)
     6 
     7 # grads_and_vars为tuples (gradient, variable)组成的列表。
     8 #对梯度进行想要的处理,比如cap处理
     9 capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]
    10 
    11 # 令optimizer运用capped的梯度(gradients)
    12 opt.apply_gradients(capped_grads_and_vars)

    二、优化器API详解

    操作 描述
    class tf.train.Optimizer 基本的优化类,该类不常常被直接调用,而较多使用其子类,
    比如GradientDescentOptimizer, AdagradOptimizer
    或者MomentumOptimizer
    tf.train.Optimizer.__init__(use_locking, name) 创建一个新的优化器,
    该优化器必须被其子类(subclasses)的构造函数调用
    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)
    添加操作节点,用于最小化loss,并更新var_list
    该函数是简单的合并了compute_gradients()与apply_gradients()函数
    返回为一个优化更新后的var_list,如果global_step非None,该操作还会为global_step做自增操作
    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中的变量计算loss的梯度
    该函数为函数minimize()的第一部分,返回一个以元组(gradient, variable)组成的列表
    tf.train.Optimizer.apply_gradients(grads_and_vars, global_step=None, name=None) 将计算出的梯度应用到变量上,是函数minimize()的第二部分,返回一个应用指定的梯度的操作Operation,对global_step做自增操作
    tf.train.Optimizer.get_name() 获取名称

    初始化优化器:

    最小化loss:

     

     计算梯度并返回:

     应用梯度更新参数:

    三、并发性参数专栏

    minimize()和compute_gradients()的可选参数,

    有GATE_NONE,GATE_OP,GATE_GRAPH三个可选选项。

    GATE_NONE最高级别并发,会造成结果不可复现;

    GATE_OP每一个节点内部不并发,计算完本节点全部梯度才更新;

    GATE_GRAPH最低并发,计算好全部梯度才更新参数,如果想在apply梯度(全梯度)前处理一下,使用这个选项。

    四、调试函数(高级API)

    一些optimizer的子类,比如 MomentumOptimizer 和 AdagradOptimizer 分配和管理着额外的用于训练的变量。这些变量称之为’Slots’,Slots有相应的名称,可以向optimizer访问的slots名称。有助于在log debug一个训练算法以及报告slots状态。

    操作 描述
    tf.train.Optimizer.get_slot_names() 返回一个由Optimizer所创建的slots的名称列表
    tf.train.Optimizer.get_slot(var, name) 返回一个name所对应的slot,name是由Optimizer为var所创建
    var为用于传入 minimize() 或 apply_gradients()的变量

    五、优化器子类展示

    本节不过多区分这些子类的区别,后续章节会对比各个优化器的性能。

    操作 描述
    class tf.train.GradientDescentOptimizer 使用梯度下降算法的Optimizer
    tf.train.GradientDescentOptimizer.__init__(learning_rate,
    use_locking=False, name=’GradientDescent’)
    构建一个新的梯度下降优化器(Optimizer)
    class tf.train.AdadeltaOptimizer 使用Adadelta算法的Optimizer
    tf.train.AdadeltaOptimizer.__init__(learning_rate=0.001,
    rho=0.95, epsilon=1e-08,
    use_locking=False, name=’Adadelta’)
    创建Adadelta优化器
    class tf.train.AdagradOptimizer 使用Adagrad算法的Optimizer
    tf.train.AdagradOptimizer.__init__(learning_rate,
    initial_accumulator_value=0.1,
    use_locking=False, name=’Adagrad’)
    创建Adagrad优化器
    class tf.train.MomentumOptimizer 使用Momentum算法的Optimizer
    tf.train.MomentumOptimizer.__init__(learning_rate,
    momentum, use_locking=False,
    name=’Momentum’, use_nesterov=False)
    创建momentum优化器
    momentum:动量,一个tensor或者浮点值
    class tf.train.AdamOptimizer 使用Adam 算法的Optimizer
    tf.train.AdamOptimizer.__init__(learning_rate=0.001,
    beta1=0.9, beta2=0.999, epsilon=1e-08,
    use_locking=False, name=’Adam’)
    创建Adam优化器
    class tf.train.FtrlOptimizer 使用FTRL 算法的Optimizer
    tf.train.FtrlOptimizer.__init__(learning_rate,
    learning_rate_power=-0.5,
    initial_accumulator_value=0.1,
    l1_regularization_strength=0.0,
    l2_regularization_strength=0.0,
    use_locking=False, name=’Ftrl’)
    创建FTRL算法优化器
    class tf.train.RMSPropOptimizer 使用RMSProp算法的Optimizer
    tf.train.RMSPropOptimizer.__init__(learning_rate,
    decay=0.9, momentum=0.0, epsilon=1e-10,
    use_locking=False, name=’RMSProp’)
    创建RMSProp算法优化器

  • 相关阅读:
    SDU暑期集训排位(8)
    hdu1423 最长公共上升子序列
    poj2385 Apple Catching (线性dp)
    hdu5857 Median(模拟)
    hdu5858 Hard problem(求两圆相交面积)
    shuoj 1 + 2 = 3? (二分+数位dp)
    Codeforces Round #460 (Div. 2) B Perfect Number(二分+数位dp)
    hdu4734 F(x)(数位dp)
    hdu3709 Balanced Number (数位dp)
    hdu3652 B-number(数位dp)
  • 原文地址:https://www.cnblogs.com/hellcat/p/7041433.html
Copyright © 2011-2022 走看看