zoukankan      html  css  js  c++  java
  • tensorflow基础【8】-优化器

    优化器可以通俗的理解成梯度下降那一套流程。

    梯度下降

    基本流程

    a. 损失函数

    b. 求导,计算梯度

    c. 更新参数

    d. 迭代下一批样本

    可以对照着理解tf。

    tf 优化器

    正常使用流程

    a. 创建优化器(也就是选择优化方法,只是选择方法,其他什么也没做)

    b. 指定损失函数和可优化参数

    c. minimize最小化损失函数,这步包含两个操作,首先计算梯度,然后更新参数

    以tf基本优化器,也就是梯度下降为例

    optimizer = tf.train.GradientDescentOptimizer(learning_rate)      # 优化器
    global_step = tf.Variable(0, name='global_step', trainable=False)   # 记录全局训练步骤
    train_op = optimizer.minimize(loss, global_step=global_step)      # 最小化损失函数,包括计算梯度,更新参数,记录训练次数

    注意tf中学习率可以是tensor, 也就是说它可被feed。

    tf 人工实现梯度下降

    a. 计算梯度 

    b. 人工处理梯度 

    c. 优化参数

    也就是把minimize拆开

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

    优化器API详解

    API 描述
    tf.train.Optimizer

    tf中优化器是个家族,Optimizer是个基类,一般不用

    用的是它的子类

    GradientDescentOptimizer, AdagradOptimizer,MomentumOptimizer等等

    tf.train.Optimizer.__init__(use_locking, name)  初始化

    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)

    最小化损失函数,返回更新后的参数列表

    global_step 为迭代次数,如果不为None,它的值会自增

    var_list 为参数列表,

    此步包含计算梯度和更新参数两步,也就是下面两个API

    tf.train.Optimizer.compute_gradients(loss,

    var_list=None,

    gate_gradients=1, aggregation_method=None, 

    colocate_gradients_with_ops=False, grad_loss=None)

    计算梯度,只是求导,没做其他的,返回(梯度,变量)的tuples

    loss是损失函数

    var_list 是参数列表,基于loss对这些参数求导

    其他版本 tf.gradients

    tf.train.Optimizer.apply_gradients(grads_and_vars,

    global_step=None,

    name=None)

     将梯度应用到变量上,更新参数,

    返回一个应用指定梯度的操作Operation,并对global_step做自增操作

    tf.train.Optimizer.get_name()  获取名称

    并发性参数

    调试函数(高级API)

    子类优化器

    tf.train.GradientDescentOptimizer    梯度下降

    tf.train.MomentumOptimizer        动量梯度下降

    tf.train.AdadeltaOptimizer

    tf.train.AdagradOptimizer

    tf.train.AdamOptimizer

    tf.train.FtrlOptimizer

    tf.train.RMSPropOptimizer

    参考资料

    http://www.cnblogs.com/hellcat/p/7041433.html

    http://www.360doc.com/content/18/0505/10/54605916_751286822.shtml

    https://www.cnblogs.com/wuzhitj/p/6648641.html

    https://blog.csdn.net/hustqb/article/details/80302726

  • 相关阅读:
    第一周例行报告psp
    作业要求 2018091-2 博客作业
    20181011-1第一周例行报告
    20180912-2第一周博客作业
    Elasticsearch
    centos7 安装Hadoop-2.6.0-cdh5.16.1.tar.gz
    centos7安装hadoop2.7.7
    centos7安装jdk8
    专业知识4
    专业知识3
  • 原文地址:https://www.cnblogs.com/yanshw/p/10521337.html
Copyright © 2011-2022 走看看