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制作简单的朴素基数估计器的教程
Apr 01 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
Python守护线程用法实例
Jun 23 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
python构造IP报文实例
May 05 Python
如何理解python中数字列表
May 29 Python
详解python的xlwings库读写excel操作总结
Feb 26 Python
python 实现两个变量值进行交换的n种操作
Jun 02 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 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
人力资源经理自我评价
2014/01/04 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
创先争优个人承诺书
2014/08/30 职场文书
治庸问责心得体会
2014/09/12 职场文书
努力学习保证书
2015/02/26 职场文书
用人单位聘用意向书
2015/05/11 职场文书
《风筝》教学反思
2016/02/23 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
Go语言怎么使用变长参数函数
2022/07/15 Golang