TensorFlow入门(二十三、退化学习率)

学习率

        学习率,控制着模型的学习进度。模型训练过程中,如果学习率的值设置得比较大,训练速度会提升,但训练结果的精度不够,损失值容易爆炸;如果学习率的值设置得比较小,精度得到了提升,但训练过程会耗费太多的时间,收敛速度慢,同时也容易出现过拟合的情况。

退化学习率

        退化学习率又叫学习率衰减或学习率更新。更新学习率是希望训练过程中,在精度和速度之间找到一个平衡,兼得学习率大核学习率小的优点。即当训练刚开始时使用大的学习率加快速度,训练到一定程度后使用小的学习率来提高精度。

TensorFlow中常用的退化学习率方法

        ①指数衰减方法

                指数衰减是较为常用的衰减方法,学习率是跟当前的训练轮次指数相关的。

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

                参数learning_rate为初始学习率;global_step为当前训练轮次,即epoch;decay_steps用于定义衰减周期,跟参数staircese配合,可以在decay_step个训练轮次内保持学习率不变;decay_rate为衰减率系数;staircase用于定义是阶梯型衰减,还是连续衰减,默认是False,即连续衰减(标准的指数型衰减)。

                指数衰减方法中学习率的具体计算公式如下:

                        decayed_learning_rate = learning_rate*decay_rate^(global_step/decay_steps)

                指数衰减方法中学习率的衰减轨迹如下图:

                        

                        红色的是阶梯型指数衰减,在一定轮次内学习率保持一致

                        绿色的是标准的指数衰减,即连续型指数衰减

        ②自然指数衰减方法

                指数衰减的一种特殊情况,学习率也是跟当前的训练轮次指数相关,只不过是以e为底数。函数中的参数意义与指数衰减方法中的参数相同。

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

                自然指数衰减方法中的学习率的具体计算公式如下:

                        decayed_learning_rate = learning_rate*exp(-decay_rate*global_step)

                自然指数衰减方法中学习率的衰减轨迹如下图:

                        

                        左下部分的两条曲线是自然指数衰减,右上部分的两条曲线是指数衰减。可以明显看到,自然指数衰减对学习率的衰减程度要远大于一般的指数衰减,它一般用于可以较快收敛的网络,或者是训练数据集比较大的场合。

        ③倒数衰减方法

                训练过程中,倒数衰减方法不固定最小学习率,迭代次数越多,学习率越小。学习率的大小跟训练次数有一定的反比关系。

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

                参数global_step为用于衰减计算的全局步数,decay_steps为衰减步数,decay_rate为衰减率,staircase用于定义是应用离散阶梯型衰减,还是连续衰减。

                倒数衰减方法中学习率的具体计算公式如下:

                        decayed_learning_rate = learning_rate/(1+decay_rate*global_step/decay_step)

                倒数衰减方法中学习率的衰减轨迹如下图:

                        

                        绿色的是离散阶梯型衰减,红色的是连续型衰减

        ④分段常数衰减方法

                分段常数衰减可以针对不同任务设置不同的学习率,从而进行精细调参。

                tf.train.piecewise_constant(x,boundaries,values,name = None)

                参数x是标量,指的是global_step,即训练次数;boundaries为学习率参数应用区间列表,即迭代次数所在的区间;values为学习率列表,存放在不同区间该使用的学习率的值。需要注意 : values的长度比boundaries的长度多1,因为两个数可以制定出三个区间,有三个区间要用3个学习率。

                分段常数衰减方法中学习率的衰减轨迹如下图:

                        ​​​​​​​

                        每个区间内,学习率的值是不一样的

        ⑤多项式衰减方法

                多项式衰减方法的原理为 : 定义一个初始的学习率和一个最低的学习率,然后按照设置的衰减规则,学习率从初始学习率逐渐降低到最低的学习率,并且可以定义学习率降低到最低的值之后,是一直保持使用这个最低的学习率,还是再升高到一定的值,然后再降低到最低的学习率,循环反复这个过程。

                tf.train.polynomial_decay(learning_rate,global_step,decay_steps,end_learning_rate = 0.0001,power = 1.0,cycle = False,name = None)

                参数global_step为当前训练轮次,即epoch;decay_steps为定义衰减周期;end_learning_rate是最小的学习率,默认值是0.0001;power是多项式的幂,默认值是1,即线性的。cycle用于定义学习率是否到达最低学习率后升高,然后再降低,默认False,保持最低的学习率。

                一般情况下多项式衰减方法中学习率的具体计算公式如下:

                        global_step = min(global_step,decay_steps)

                        decayed_learning_rate = (learning_rate - end_learning_rate) * (1 - global_step / decay_steps)^(power) + end_learning_rate

                如果定义cycle为True,学习率在到达最低学习率后反复升高降低,学习率计算公式如下:

                        decay_steps = decay_steps * ceil(global_step / decay_steps)

                        decayed_learning_rate = (learning_rate - end_learning_rate) * (1 - global_step / decay_steps)^(power) + end_learning_rate

                多项式衰减方法中学习率的衰减轨迹如下图:

                        

                        红色的为cycle = False时的情况,下降后不再上升,保持不变;绿色的为cycle = True时的情况,下降后反复升降。

                多项式衰减中设置学习率反复升降的目的是为了防止神经网络后期训练的学习率过小,导致网络参数陷入某个局部,找不到最优解;设置学习率升高机制,有可能使网络找出局部最优解。

指数衰减示例代码如下:

import tensorflow.compat.v1 as tf
tf.compat.v1.disable_v2_behavior()global_step = tf.Variable(0,trainable=False)
#定义初始学习率
initial_learning_rate = 0.1
#使用指数衰减方法
learning_rate = tf.train.exponential_decay(initial_learning_rate,global_step,decay_steps = 20,decay_rate = 0.8)#定义一个操作,global_step每次加1后完成计步
opt = tf.train.GradientDescentOptimizer(learning_rate)
add_global = global_step.assign_add(1)init = tf.global_variables_initializer()
with tf.Session() as sess:sess.run(init)print(sess.run(learning_rate))#循环20次,将每次的学习率打印出来for i in range(20):g,rate = sess.run([add_global,learning_rate])print(g,rate)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/157531.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PySpark 概述

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…

B站视频“多模态大模型,科大讯飞前NLP专家串讲”记录

文章目录 多模态:对齐 -- align迁移学习和zero-shotClipBlip 多模态: 图片、文字、视频、语音等不同的表征。 表示信息的方式有多种,但是不同的表示方式携带的信息不完全相同。 对齐 – align 如第一个图中,文字内容的描述和图…

shiro反序列化和log4j

文章目录 安装环境shiro漏洞验证log4j 安装环境 进入vulhb目录下的weblogic,复现CVE-2018-2894漏洞: cd /vulhub/shiro/CVE-2010-3863查看docker-compose的配置文件: cat docker-compose.yml如图,里面有一个镜像文件的信息和服…

【数据结构】算法效率的度量方法

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🎏事后统计方法 🎏事前分析估算方法 🎏函数的渐进式增长 结语 在上篇文章中我们提到了算法的设计要求中我们要尽量满足时间效率高…

【Python 零基础入门】 Numpy

【Python 零基础入门】第六课 Numpy 概述什么是 Numpy?Numpy 与 Python 数组的区别并发 vs 并行单线程 vs 多线程GILNumpy 在数据科学中的重要性 Numpy 安装Anaconda导包 ndarraynp.array 创建数组属性np.zeros 创建np.ones 创建 数组的切片和索引基本索引切片操作数组运算 常…

计算机体系结构和操作系统

这篇文章的主要内容是冯诺依曼计算机体系结构和操作系统的理解。 目录 一.冯诺依曼计算机体系结构 二.操作系统的理解 一.冯诺依曼计算机体系结构 如图是冯诺依曼计算机体系结构,计算机本质就是对数据进行处理的机器,图中,数据从输入设备交给…

uni-app : 生成三位随机数、自定义全局变量、自定义全局函数、传参、多参数返回值

核心代码 function generateRandomNumber() {const min 100;const max 999;// 生成 min 到 max 之间的随机整数// Math.random() 函数返回一个大于等于 0 且小于 1 的随机浮点数。通过将其乘以 (max - min 1),我们得到一个大于等于 0 且小于等于 (max - min 1…

200、使用默认 Exchange 实现 P2P 消息 之 消息生产者(发送消息) 和 消息消费者(消费消息)

RabbitMQ 工作机制图: Connection: 代表客户端(包括消息生产者和消费者)与RabbitMQ之间的连接。 Channel: 连接内部的Channel。channel:通道 Exchange: 充当消息交换机的组件。 Queue&#xff…

服务运营 |摘要:学术+业界-近期前沿运筹医疗合作精选

推文作者:李舒湉 编者按 本文归纳整理了近期INFORMS Journal on Applied Analytics中的相关业界合作研究。 这些研究成果体现了运筹学在医疗健康领域实践的效果。文中的学术业界合作使用了不同的研究工具。第一篇文章使用仿真模型帮助诊所进行不同拥挤程度下诊所使用…

【C++】继承 ③ ( 继承的一些重要特性 | 子类拥有父类的所有成员 | 多态性 | 子类可以拥有父类没有的成员 | 代码示例 )

文章目录 一、继承的一些重要特性1、子类拥有父类的所有成员2、子类可以拥有父类没有的成员3、多态性 二、代码示例 一、继承的一些重要特性 1、子类拥有父类的所有成员 子类 继承 父类 , 则 子类 拥有 父类的 所有 成员变量 和 成员函数 ; 这里要注意 : 子类 拥有 父类的 私有…

Python中使用IDLE调试程序

在IDLE中,使用菜单栏中的“Debug”对IDLE打开的python程序进行调试。 1 打开调试开关 选择IDLE菜单栏的“Debug->Debugger”,如图1①所示;此时在IDLE中会显示“[DEBUG ON]”,即“调试模式已打开”,如图1②所示&am…

【使用 TensorFlow 2】03/3 创建自定义损失函数

一、说明 TensorFlow 2发布已经接近5年时间,不仅继承了Keras快速上手和易于使用的特性,同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则:简化概念,海纳百川,构建生态.这是本系列的第三部分,…

区块链加密虚拟货币交易平台安全解决方案

区块链机密货币交易锁遭入侵,安全存在隐患。使用泰雷兹Protect server HSM加密机,多方位保护您的数据,并通过集中化管理,安全的存储密钥。 引文部分: 损失7000万美元!黑客入侵香港区块链加密货币交易所 2023年9月&…

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码:自动化测试代码。 如果过程中遇到其他非文本中提到的错误,可以使用搜索引擎搜索错误,找出解决方案,再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…

【Hello Algorithm】暴力递归到动态规划(二)

暴力递归到动态规划(二) 背包问题递归版本动态规划 数字字符串改字母字符串递归版本动态规划 字符串贴纸递归版本动态规划 **特别需要注意的是 我们使用数组之前一定要进行初始化 不然很有可能会遇到一些意想不到的错误 比如说在Linux平台上 new出来的in…

记一次生产大对象及GC时长优化经验

最近在做一次系统整体优化,发现系统存在GC时长过长及JVM内存溢出的问题,记录一下优化的过程 面试的时候我们都被问过如何处理生产问题,尤其是线上oom或者GC调优的问题更是必问,所以到底应该如何发现解决这些问题呢,用真实的场景实操&#xff…

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统,用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户,当用户规模扩大到一定程度时,开始联系相关企业提供信息服务,并…

批量执行insert into 的脚本报2006 - MySQL server has gone away

数据库执行批量数据导入是报“2006 - MySQL server has gone away”错误,脚本并没有问题,只是insert into 的批量操作语句过长导致。 解决办法: Navicat ->工具 ->服务器监控->mysql ——》变量 修改max_allowed_packet大小为512…

TCP/IP(七)TCP的连接管理(四)全连接

一 全连接队列 nginx listen 参数backlog的意义 nginx配置文件中listen后面的backlog配置 ① TCP全连接队列概念 全连接队列: 也称 accept 队列 ② 查看应用程序的 TCP 全连接队列大小 实验1: ss 命令查看 LISTEN状态下 Recv-Q/Send-Q 含义附加:…

【Java学习之道】日期与时间处理类

引言 在前面的章节中,我们介绍了Java语言的基础知识和核心技能,现在我们将进一步探讨Java中的常用类库和工具。这些工具和类库将帮助我们更高效地进行Java程序开发。在本节中,我们将一起学习日期与时间处理类的使用。 一、为什么需要日期和…