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:表明如果 ...
随机推荐
- bond网卡
目录 一.bond概述 1.1.bond的优点 二.bond模式 2.1.mode=0 2.2.mode=1 2.3.mode=2 2.4.mode=3 2.5.mode=4 2.6.mode=5 2 ...
- C# 根据波形图片,提取测试数据点 Winform
其主要思路就是提取图片每个1px宽度上面的像素点,每个宽度只提取一个,并用Point记录这个像素点的 x和y.这样做的前提是图片除了波形有明显颜色以外,其他地方的像素点都能被排除,最方便的就是把排除区 ...
- Python并行运算——threading库详解(持续更新)
0. 写在前面:进程和线程 博文参考: Python的并行(持续更新)_python 并行-CSDN博客 <Python并行编程 中文版> 一些相关概念请见上一篇博文. 1. 在Pytho ...
- 莫烦tensorflow学习记录 (2)激励函数Activation Function
https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-activation-function/ 这里的 AF 就是指的激励函数 ...
- 006. Gitlab组件介绍
Gitlab组件 [root@master tools]# gitlab-ctl status #检查服务状态 run: gitaly: (pid 26704) 2201s; run: log: (p ...
- vsftp配置使用
vsftp简介: VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSFT ...
- (JAVA)设计模式-适配器模式
模式的定义和特点: 适配器模式(Adapter)是一种将一个类的接口转换成客户希望的另外一个接口的设计模式,可以提高代码的复用性和灵活性. 结构与实现: 定义一个适配器类来实现业务接口,再继承现有组件 ...
- NOIP模拟60
T1 整除 解题思路 答案就是 n 的每一个质因数的合法的答案数相乘(证明的话就....) 但是复杂度显然不允许(虽然我们可以给指数取模水过去).. 可以用积性筛(线性筛)利用质数筛出 \(x^m\) ...
- react表单处理 受控组件
将state与表单项中的value值绑定在一起,有state的值来控制表单元素的值,称为受控组件. 绑定步骤: 在state中添加一个状态,作为表单元素的value值 给表单元素绑定change事件, ...
- webpack externals忽略不打入的包
例如项目中使用从 CDN 引入 jQuery,而不是把它打包进来使用 import $ from 'jquery' webpack.config.js externals: { jquery: 'jQ ...