TensorFlow中学习率[通俗易懂]

TensorFlow中学习率[通俗易懂]学习率学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。指数衰减学习率指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化tf.train.expo…

大家好,又见面了,我是你们的朋友全栈君。

学习

学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。

 

 

 

指数衰减学习率

 

指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化

 

tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)

 

  • learn_rate:事先设定的初始学习率
  • global_step:训练轮数
  • decay_steps:衰减速度。staircase=True:代表了完整的使用一遍训练数据所需要的迭代轮数(=总训练样本数/每个batch中的训练样本数)
  • decay_rate:衰减系数
  • staircase:默认为False,此时学习率随迭代轮数的变化是连续的(指数函数);为 True 时,global_step/decay_steps 会转化为整数,此时学习率便是阶梯函数

步骤:

  1. 首先使用较大学习率(目的:为快速得到一个比较优的解);
  2. 然后通过迭代逐步减小学习率(目的:为使模型在训练后期更加稳定);

模板:


global_step = tf.Variable(0)

 

learning_rate = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True)     #生成学习率

 

learning_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(....., global_step=global_step)  #使用指数衰减学习率

 

实例代码:

TRAINING_STEPS = 100
global_step = tf.Variable(0)
LEARNING_RATE = tf.train.exponential_decay(
    0.1, global_step, 1, 0.96, staircase=True)

x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)
train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(
    y, global_step=global_step)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(TRAINING_STEPS):
        sess.run(train_op)
        if i % 10 == 0:
            LEARNING_RATE_value = sess.run(LEARNING_RATE)
            x_value = sess.run(x)
            print("After %s iteration(s): x%s is %f, learning rate is %f." %
                  (i + 1, i + 1, x_value, LEARNING_RATE_value))

 

关于global_step的探究:

  • global_step – 用于衰减计算的全局步骤。 一定不为负数。
  • 喂入一次 BACTH_SIZE 计为一次 global_step
  • 每间隔decay_steps次更新一次learning_rate值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137629.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • EasyDSS流媒体服务器软件-正式环境安装部署攻略

    EasyDSS流媒体服务器软件-正式环境安装部署攻略EasyDSS流媒体服务器软件,提供一站式的转码、点播、直播、时移回放服务,极大地简化了开发和集成的工作。其中,点播功能主要包含:上传、转码、分发。直播功能主要包含:直播、录像,直播支持RTMP输入,RTMP/HLS/HTTP-FLV的分发输出;录像支持自定义保存时长、检索及下载。提供丰富的二次开发接口,基于JSON的封装及HTTP调用。提供播放鉴权、推流鉴权等安全保证。提供用户及相关权限管理…

  • 从零开始学习UCOSII操作系统4–任务管理

    从零开始学习UCOSII操作系统4–任务管理从零开始学习UCOSII操作系统4–任务管理1、重讲任务(1)任务可以是一个无限的循环,也可以在一次执行完毕后被删除。这里需要注意的是,任务的代码并不是真正的删除了,而是UCOSII不再理会该任务代码,所以该任务代码不会再执行。(2)建立任务,OSTaskCreate()如果想让UCOSII管理用户的任务,必须先建立任务,可以通过将任务的地址(函数名)和其他参数传递到

  • idea激活码2019版激活方式实测可用

    今天来更新一下2019版本的idea激活方式。

  • 最通俗易懂的JavaScript入门教程

    最通俗易懂的JavaScript入门教程前言:“成功没有捷径,脚踏实地一步一个脚印,该来的总会来,不好高骛远,不急功近利,付出总会有回报,不管处于哪个阶段,都要一步一个脚印,踏实的走好每一步!”你好,我是梦阳辰!快和我一起走进JavaScript的世界吧。01.JavaScript概述1.什么是JavaScript?JavaScript是运行在浏览器上的脚本语言。简称JS。JavaScript是王景公司(NetScape)…

  • 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?「建议收藏」

    终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?「建议收藏」前言核心部件1总体架构2微服务架构核心要素通讯协议1支持协议2性能比较服务依赖方式组件运行流程微服务架构组成以及注意事项1架构分解2注意事项总结前言微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影

  • OpenWrt make menuconfig 构建过程「建议收藏」

    OpenWrt make menuconfig 构建过程「建议收藏」OpenWrtmakemenuconfig构建过程1.课题背景之前在《20190614OpenWrt如何添加驱动以及应用程序谢艺华-遗留问题解答》文档的问题7中,承诺要写一个关于makemenuconfig的构架过程。于是就决定花点时间熟悉一下流程,方便以后的工作。2.分析过程2.1OpenWrt目录下的Makefile分析makemenuconfig的过程也…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号