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使用turtle库绘制时钟
Mar 25 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
python中字符串内置函数的用法总结
Sep 13 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python实现桌面气泡提示功能
Jul 29 Python
python获取array中指定元素的示例
Nov 26 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
Tensorflow分批量读取数据教程
Feb 07 Python
ipython jupyter notebook中显示图像和数学公式实例
Apr 15 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项目的方法
2006/10/09 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
angular中的cookie读写方法
2017/08/02 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
Python解析最简单的验证码
2016/01/07 Python
python方向键控制上下左右代码
2018/01/20 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
霸王洗发水广告词
2014/03/14 职场文书
公司承诺书格式
2014/05/21 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
同志主要表现材料
2014/08/21 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
八一建军节慰问信
2015/02/14 职场文书
银行实习推荐信
2015/03/27 职场文书
公司仓库管理制度
2015/08/04 职场文书
任命书格式范文
2015/09/22 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA
利用Redis实现点赞功能的示例代码
2022/06/28 Redis