Keras SGD 随机梯度下降优化器参数设置方式


Posted in Python onJune 19, 2020

SGD 随机梯度下降

Keras 中包含了各式优化器供我们使用,但通常我会倾向于使用 SGD 验证模型能否快速收敛,然后调整不同的学习速率看看模型最后的性能,然后再尝试使用其他优化器。

Keras 中文文档中对 SGD 的描述如下:

keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)

随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量

参数:

lr:大或等于0的浮点数,学习率

momentum:大或等于0的浮点数,动量参数

decay:大或等于0的浮点数,每次更新后的学习率衰减值

nesterov:布尔值,确定是否使用Nesterov动量

参数设置

Time-Based Learning Rate Schedule

Keras 已经内置了一个基于时间的学习速率调整表,并通过上述参数中的 decay 来实现,学习速率的调整公式如下:

LearningRate = LearningRate * 1/(1 + decay * epoch)

当我们初始化参数为:

LearningRate = 0.1
decay = 0.001

大致变化曲线如下(非实际曲线,仅示意):

Keras SGD 随机梯度下降优化器参数设置方式

当然,方便起见,我们可以将优化器设置如下,使其学习速率随着训练轮次变化:

sgd = SGD(lr=learning_rate, decay=learning_rate/nb_epoch, momentum=0.9, nesterov=True)

Drop-Based Learning Rate Schedule

另外一种学习速率的调整方法思路是保持一个恒定学习速率一段时间后立即降低,是一种突变的方式。通常整个变化趋势为指数形式。

Keras SGD 随机梯度下降优化器参数设置方式

对应的学习速率变化公式如下:

LearningRate = InitialLearningRate * DropRate^floor(Epoch / EpochDrop)

实现需要使用 Keras 中的 LearningRateScheduler 模块:

from keras.callbacks import LearningRateScheduler
# learning rate schedule
def step_decay(epoch):
 initial_lrate = 0.1
 drop = 0.5
 epochs_drop = 10.0
 lrate = initial_lrate * math.pow(drop, math.floor((1+epoch)/epochs_drop))
 return lrate

lrate = LearningRateScheduler(step_decay)

# Compile model
sgd = SGD(lr=0.0, momentum=0.9, decay=0.0, nesterov=False)
model.compile(loss=..., optimizer=sgd, metrics=['accuracy'])

# Fit the model
model.fit(X, Y, ..., callbacks=[lrate])

补充知识:keras中的BGD和SGD

关于BGD和SGD

首先BGD为批梯度下降,即所有样本计算完毕后才进行梯度更新;而SGD为随机梯度下降,随机计算一次样本就进行梯度下降,所以速度快很多但容易陷入局部最优值。

折中的办法是采用小批的梯度下降,即把数据分成若干个批次,一批来进行一次梯度下降,减少随机性,计算量也不是很大。 mini-batch

keras中的batch_size就是小批梯度下降。

以上这篇Keras SGD 随机梯度下降优化器参数设置方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的requests网络编程包使用教程
Jul 11 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
使用python实现mqtt的发布和订阅
May 05 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
Python 如何实现访问者模式
Jul 28 Python
pymysql模块使用简介与示例
Nov 17 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 Python
python游戏开发Pygame框架
Apr 22 Python
python支持多继承吗
Jun 19 #Python
python和php哪个容易学
Jun 19 #Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 #Python
Python魔术方法专题
Jun 19 #Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 #Python
如何对python的字典进行排序
Jun 19 #Python
浅谈Python中的继承
Jun 19 #Python
You might like
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
简单谈谈favicon
2015/06/10 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
图片按比例缩放函数
2006/06/26 Javascript
自适应图片大小的弹出窗口
2006/07/27 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
javascript中Object使用详解
2015/01/26 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
python每次处理固定个数的字符的方法总结
2013/01/29 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python中常用信号signal类型实例
2018/01/25 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
Hibernate持久层技术
2013/12/16 面试题
岗位聘任报告
2015/03/02 职场文书
戒赌保证书
2015/05/11 职场文书
详细总结Python常见的安全问题
2021/05/21 Python