tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法
本文介绍在tensorflow
库中,用于动态调整神经网络的学习率的一种方法——指数衰减ExponentialDecay()
策略的参数含义及其具体用法。
在进行神经网络训练时,我们经常需要用到动态变化的学习率,其中指数衰减ExponentialDecay()
策略是我们常用的一种策略。在tensorflow
库中,其完整的用法是tf.keras.optimizers.schedules.ExponentialDecay()
,其中的具体参数如下所示。
tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate, decay_steps, decay_rate, staircase=False, name=None
)
首先,我们需要知道,在用了ExponentialDecay()
策略后,程序将动态调整神经网络训练过程中的学习率,且这一调整是与我们当前训练的step
有关的。具体关于step
的解释,大家可以参考文章神经网络常见参数解释:epoch、batch、batch size、step、iteration,本文就不再赘述。
如以下代码所示,使用ExponentialDecay()
策略后,程序将依据如下的规律,基于当前训练的step
,以及我们自行设定的几个参数,从而计算得到当前的学习率。其中,函数的返回值就是当前的学习率。
def decayed_learning_rate(step):
return initial_learning_rate * decay_rate ^ (step / decay_steps)
其中,initial_learning_rate * decay_rate ^ (step / decay_steps)
就是当前学习率的计算公式。这里的initial_learning_rate
、decay_rate
以及decay_steps
,就是我们前面提到的ExponentialDecay()
函数的前3
个参数。其中,initial_learning_rate
是我们的初始学习率,decay_rate
是学习率下降的速率,而decay_steps
则是学习率下降的位置(具体含义我们稍后介绍)。此外,ExponentialDecay()
策略还有两个参数,staircase
表示我们在计算(step / decay_steps)
时,是对结果向下取整还是取小数,默认为False
,即取小数结果(具体含义我们稍后介绍);最后一个name
参数,只是对当前这一学习率下降的策略加以命名,一般用不上这个参数,我们就不再介绍了。
由此,我们可以初步知道,ExponentialDecay()
函数的前4
个参数都是用来计算当前的学习率的;且结合我们前面的公式initial_learning_rate * decay_rate ^ (step / decay_steps)
,我们可以知道,随着当前的step
不断增加,decay_rate ^ (step / decay_steps)
是降低的。
接下来,我们直接带入具体的数据,来看一下这几个参数的具体作用。
如下图所示,我们这里有一个训练数据集,其中共有193608
个样本。
同时,我设置了神经网络的batch size
为2048
,那么基于前述提及的文章神经网络常见参数解释:epoch、batch、batch size、step、iteration,可知在1
个epoch
中,我们对这193608
个样本加以训练,共需要的batch
数目为193608 / 2048
,也就是94.54
,向上取整为95
,相当于需要95
个step
。此外,我设置initial_learning_rate
、decay_rate
以及decay_steps
分别为0.1
、0.95
以及95
,且设置staircase
为True
。如下图所示。
此时,我们就可以对每一个参数的具体含义与作用加以介绍了。首先,我们开始训练神经网络模型,即step
开始从0
逐步增加;但是由于我的staircase
为True
,因此只要指数(step / decay_steps)
是小于1
的,那么都视作0
(因为当前参数设置是对结果向下取整);而由于除了0
以外任何数的0
次方都是1
,因此此时的公式initial_learning_rate * decay_rate ^ (step / decay_steps)
始终等于initial_learning_rate
,也就是一直保持0.1
;只有当step
到达我们设置的decay_steps
之后,指数(step / decay_steps)
才可以成为1
,使得decay_rate
终于产生了效果。而在这里,由于我故意设置decay_steps
为95
,因此按道理只要经过1
个epoch
之后,学习率就会下降——因为前面我们计算过了,在1
个epoch
中需要95
个step
。那么此时,学习率就变为了0.1 * 0.95
。
接下来,我们运行上述代码,训练6
个epoch
,来验证一下学习率的变化是否如同我们的设想。
下图为TensorBoard
中,学习率随着epoch
的变化。这里需要注意,我这里截图的时候开了曲线图的平滑选项,因此应该以浅色的线为准。
上面的图因为不太全,所以或许看不出什么;我们直接将学习率变化情况导出,如下图所示。
其中,图中的step
实际上表示的是epoch
,大家这里理解即可。可以看到,在epoch
为0
时(也就是进行第一个epoch
时),学习率一直为0.1
;而进行到第二个epoch
时——此时我们训练过程的step
就应该是从95
开始,但还不到190
,因此(step / decay_steps)
始终为1
,学习率就是0.1 * 0.95 = 0.095
了(因为数据格式问题,精度稍有差距);随后,进行到第三个epoch
时——此时我们训练过程的step
就应该是从190
开始,但还不到285
,因此(step / decay_steps)
始终为2
,学习率就已经是0.1 * 0.95 * 0.95 = 0.09025
了。
由此可知,假如我将decay_steps
扩大10
倍,使得其为950
,那么在前10
个epoch
时,学习率都不会发生改变,而从第11
个epoch
开始,学习率才会开始衰减。
这里我的参数staircase
设置为True
,因此会出现上述结果;相反的,如果设置为False
,那么计算(step / decay_steps)
时,是对结果取小数,换句话说只要step
发生变化,那么当前对应的学习率也会发生变化,只不过变化的幅度会稍小一些。
由此看到,上述学习率的变化,是符合我们的预期的。当然,上图中最后两个epoch
对应的学习率没有发生变化,这个具体原因我暂时也没搞清楚;不过学习率下降作为一种策略,我们通过上述代码,还是达到了动态调整学习率的需求的。
至此,大功告成。
tensorflow学习率指数衰减ExponentialDecay的参数介绍与使用方法的更多相关文章
- 【体系结构】Oracle参数介绍
[体系结构]Oracle参数介绍 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩ ...
- 【tensorflow】】模型优化(一)指数衰减学习率
指数衰减学习率是先使用较大的学习率来快速得到一个较优的解,然后随着迭代的继续,逐步减小学习率,使得模型在训练后期更加稳定.在训练神经网络时,需要设置学习率(learning rate)控制参数的更新速 ...
- Tensorflow笔记——神经网络图像识别(四)搭建模块化的神经网络八股(正则化,指数衰减学习率,滑动平均等优化)
实战案例: 数据X[x0,x1]为正太分布随机点, 标注Y_,当x0*x0+x1*x1<2时,y_=1(红),否则y_=0(蓝) 建立三个.py文件 1. generateds.py生成数据 ...
- TensorFlow笔记之常见七个参数
对TensorFlow深度学习中常见参数的总结分析 神经网络中常见的参数有:初始学习率.学习率衰减率.隐藏层节点数量.迭代轮数.正则化系数.滑动平均衰减率.批训练数量七个参数. 对这七个参数,大部分情 ...
- caffe中的学习率的衰减机制
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Julialove102123/article/details/79200158 根据 caffe/ ...
- TensorFlow tf.app&tf.app.flags用法介绍
TensorFlow tf.app&tf.app.flags用法介绍 TensorFlow tf.app argparse tf.app.flags 下面介绍 tf.app.flags.FL ...
- 【转载】 TensorFlow tf.app&tf.app.flags用法介绍
作 者:marsggbo 出 处:https://www.cnblogs.com/marsggbo版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本. ---------- ...
- SQLMAP参数介绍
转自:http://zhan.renren.com/bugpower?gid=3602888498044629629&checked=true SQLMAP参数介绍 sqlmap的使用方式:p ...
- G++ 参数介绍(转载)
g++参数介绍 From: http://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html gcc and g++分别是gnu的c & ...
- pentaho cde 画图参数介绍
初步接触pentaho,由于在国内的资料很少,唯有看英文文档,做了N次反复尝试,挖掘了pentaho CDE中画图的一些基本参数. 下面就列出来了一些常用参数介绍: crosstabMode:表明如果 ...
随机推荐
- Hello Laravel! 准备
Hello Laravel! 准备 目录 Hello Laravel! 准备 什么是 Laravel? 为什么选择 Laravel? 优雅的语法 丰富的功能 强大的社区支持 安全性 易于扩展 Lara ...
- salesforce零基础学习(一百三十九)Admin篇之Begins/Contains/Starts With 是否区分大小写
本篇参考: https://help.salesforce.com/s/articleView?id=sf.customize_functions_begins.htm&type=5 http ...
- CF527E Data Center Drama 题解
目录 题目 题意 题解 思路 详解 注意事项 代码 AC 记录 尾声 题目 CF527E Data Center Drama · 戳这里 题意 给定一张 $n$ 个点 $m$ 条边的连通无向图. 你需 ...
- 通过axios实现数据请求
vue.js默认没有提供ajax功能的. 所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互. 注意,axios本质上就是javascript的ajax封装,所以会 ...
- 利用docker 搭建File Browser 文件管理系统
File Browser就是一个文件浏览器,因为linux并不方便桌面管理,所以Filebrowser就是帮助我们管理linux服务器上文件的程序,你可以称他为网盘程序,可以管理文件.可以分享文件,另 ...
- c/c++复习 2.0 ProMax
main函数执行前后做了什么 初始化.data数据段,包括静态变量和全局变量 初始化.bss字段,包括int 0; bool false: 指针 NULL 设置栈指针.main函数的参数传递.全局对象 ...
- 7.16考试总结(NOIP模拟17)[世界线·时间机器·weight]
车如流水马如龙,花月正春风 前言 其实,一开始 T1 是看错了题的,我以为是无向图来着,就想直接搞到每一个联通块的完全图,然后减去总边数就好了. 发现错误之后,码了个暴力,想得 40pts 来着,没想 ...
- 【深度学习】c++部署onnx模型(Yolov5、PP-HumanSeg、GoogLeNet、UNet)
这两天部署了好多模型,记录一下.代码链接. onnxruntime在第一张图的推理上比opencv快很多,但在后面的图上略微慢了一点. 不同的模型的部署时的输出不同,处理时需要对输出比较了解,下面分别 ...
- docker inspect 格式化输出
docker inspect 例子 [root@hmm ~]# docker run -tid --name YUN-teSt ubuntu 337170fc3109a824273a7f04dd5c5 ...
- INTEL S4500 960G 入手评测
INTEL S4500 960G 入手评测 简易上个图: CDI AS SSD: CDM: AS SSD AND CDM: -