当前位置: 首页 > news >正文

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)

相关文章:

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

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

登录中获取验证码的节流

一. 验证码框 <el-input placeholder"请输入验证码" prefix-icon"el-icon-lock" v-model"ruleForm.code"><el-button slot"suffix" :disabled"disabled" type"text" size"mini" click"ch…...

spring boot 实现Minio分片上传

应用场景 分片上传&#xff0c;就是将所要上传的文件&#xff0c;按照一定的大小&#xff0c;将整个文件分隔成多个数据块&#xff08;我们称之为Part&#xff09;来进行分别上传&#xff0c;上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。 分片上传的场景…...

2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 Python编程&#xff08;1~6级&#xff09;全部真题・点这里 第1题&#xff1a;生日相同 在一个有180人的大班级中&#xff0c;存在两个人生日相同的概率非常大&#xff0c;现给出每个学生的名字&#xff0c;出生月日。试…...

docker-compose 部署示例

文章目录 docker-compose文件格式docker-compose 下载 docker-compose文件格式 这个软件的实际很小&#xff0c;只是根据配置文件产生一些docker命令来执行可以。 配置文件本身是yml的格式&#xff0c;如下 version: 3.5services:# Etherpad: real-time collaborative docume…...

新版WordPress插件短视频去水印小程序源码

最新版去水印小程序源码&#xff0c;本版本全开源&#xff0c;是WordPress插件 上传到Wordpress 安装插件 启动之后 绑定自己的小程序id wordpress可以在宝塔一键部署 也可以用我的这个 搭建前我们需要一下东西&#xff1a; 第一个&#xff1a;一台服务器&#xff08;国内外都可…...

如何提高MES系统的落地成功率?

导 读 ( 文/ 2768 ) 制造执行系统&#xff08;MES&#xff09;在现代制造业中扮演着至关重要的角色&#xff0c;但实施MES系统并取得成功并非易事。为了帮助企业提高MES系统的落地成功率&#xff0c;本文将介绍关键的方法和策略。通过深入了解业务需求、有效的团队合作、全面的…...

private key ssh连接服务器

这里用到的软件是PuTTY。 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 保存本地rsa文件后&#xff0c;打开软件PuTTYgen&#xff0c;点击Load导入文件&#xff0c;输入Key passphrase即密码&#xff0c;保存至本地。 随后在PuTTY配置ssh的用户名 来Cred…...

PDF-Word-图片等的互相转换

轻闪PDF客户端 - 功能强大的一站式PDF工具 | PDF编辑、转换、阅读 上面页面支持PDF转换成各类别&#xff1a;鼠标停留在PDF工具&#xff0c;点击转换类型即可在线转换 Word-PDF&#xff1a;word文档打开word文件中&#xff0c;点击文件->另存为->另存为的位置->保存…...

【VR开发】【Unity】0-课程简介和概述

【说明】 这是我录制的一套VR基础开发课程的文字版本&#xff0c;更加便于快速参考。 应大家在后台所提的需求&#xff0c;从今天开始&#xff0c;我计划带给大家一套完整达40课时的VR开发基础课程。 在开始学习前需要注意如下几点&#xff1a; 本教程基于Unity2022.2.1f1版…...

Java面试题-Java核心基础-第三天(基本数据类型)

目录 一、Java的基本数据类型了解吗&#xff1f; 二、基本类型和包装类型的区别 三、包装类型的缓存机制了解吗&#xff1f; 四、自动拆箱和自动装箱了解吗&#xff1f; 五、为什么浮点数在运算的时候会有精度损失的风险&#xff1f; 六、如何解决浮点数在运算时存在的精度…...

Bean容器里的单例是根据什么识别它是同一个类呢?(比如容器里创建了A类,再去用这个A类的时候,Bean容器怎么知道这个就是A类?)

Spring容器中的Bean的识别主要依赖于Bean的名称&#xff08;ID&#xff09;和类型。以下是详细解释&#xff1a; Bean的名称&#xff08;ID&#xff09;&#xff1a;每个Bean在Spring容器中都必须有一个唯一的名称&#xff08;ID&#xff09;。这个名称通常在配置文件中、Java…...

简述 happens - before 八大规则

“Happens-Before” 是Java内存模型中的概念&#xff0c;用于描述多线程程序中操作之间的顺序和可见性关系。它定义了一组规则&#xff0c;哪些操作具有可预测的行为。以下是"Happens-Before" 的八大规则&#xff1a; 程序顺序规则&#xff08;Program Order Rule&am…...

windows flask 多进程高并发

最近在做的一个项目&#xff0c;需要将十几个python函数封装程flask服务供外界调用&#xff0c;每个函数之间没有什么关系&#xff0c;相互独立。虽然感觉不是很难&#xff0c;但因为用的windows系统&#xff0c;遇到的坑比较多&#xff0c;在此一一总结一下。 flask偶尔出现卡…...

【设计模式】十、组合模式

文章目录 案例组合模式基本介绍类图代码 组合模式在 JDK 集合的源码分析组合模式的注意事项和细节 案例 编写程序展示一个学校院系结构&#xff1a;需求是这样&#xff0c;要在一个页面中展示出学校的院系组成&#xff0c;一个学校有多个学院&#xff0c;一个学院有多个系。如…...

React知识点系列(8)-每天10个小知识

目录 1. 在 React 中&#xff0c;什么是受控组件和非受控组件&#xff1f;请解释一下它们之间的区别和适用场景。2. 如何使用 React 的 useReducer Hook 来管理组件状态&#xff1f;请描述一下 useReducer 的工作原理和适用场景。工作原理&#xff1a;适用场景&#xff1a; 3. …...

rust注释

一、普通注释 // 这是第一种注释方式/* 这是第二种注释方式 */ /* 多行注释 多行注释 多行注释*/二、文档注释 ///外部行文档注释。为接下来的项生成帮助文档 //! 内部行文档注释。为注释所属于的项生成帮助文档/**...*/外部块文档注释。为接下来的项生成帮助文档 /*!...*/内…...

【Java学习之道】GUI开发的基本概念

引言 在这一章&#xff0c;我们将一起走进Java的图形用户界面&#xff08;GUI&#xff09;开发的世界。在你阅读完这篇文章后&#xff0c;你将能够了解什么是GUI&#xff0c;以及如何使用Java进行GUI的开发。 一、什么是GUI 首先&#xff0c;让我们来解答一个许多初学者都会…...

Docker部署gitlab_ce(避坑版---社区版)

1 下载docker 2 下载gitlab镜像 3 运行 4 进入容器内部修改 5 在浏览器里访问 6 修改root密码&#xff08;如果忘记请修改&#xff09; 1 下载docker # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2# 设置yum源 yum-config-manager --add-repo https…...

数据仓库DW-理论知识储备

数据仓库DW 数据仓库具备 采集数据、分析数据、存储数据的功能&#xff0c;最后得出一些有用的数据&#xff0c;一些目标数据来使用。 采集来自不同源的数据&#xff0c;然后对这些数据进行分析和计算得出一些有用的指标&#xff0c;提供数据决策支持。 数据的来源有&#xff…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...