传统的网络训练过程中,一般学习率都是逐渐减小的,像keras可以使用keras.callbacks.ReduceLROnPlateau对学习率进行调整,例如:
函数:

keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', min_delta=0.0001, cooldown=2, min_lr=0)

回调函数将会监视其中的一个metrics,在上面的例子中,metrics为val_loss,同时设置patience,如果监视的metrics超过10个eopch都没有任何提升,那么调整学习率—往小的方向进行调整。得到新的学习率,new_lr = lr * factor。cooldown参数值得是在lr改变之后,等待2个eopch之后回复正常的操作(?)。min_delta阈值为衡量新的最优值,只关注显著变化(?)。

直观地说,将学习率向更高的学习率振荡是有帮助的。因为较高的学习率可能有助于摆脱鞍点。如果鞍点是复杂的高原,较低的学习率可能无法得到鞍点以外的梯度。

Cyclic Learning Rates

熟悉几个概念:
base_lr : 下界学习率。
max_lr : 上界学习率。
cycle: 学习率从下界学习率(base_lr)到上界学习率(max_lr)再到下界学习率(base_lr),所经历的迭代次数iterations。
stepsize: cycle迭代次数的一半。

代码:https://github.com/bckenstler/CLR

One Cycle Policy

在论文[“A disciplined approach to neural network hyper-parameters: Part 1 — learning rate, batch size, momentum, and weight decay”](A disciplined approach to neural network hyper-parameters: Part 1 — learning rate, batch size, momentum, and weight decay)中,Leslie Smith描述了设置超参数(即学习率、动量和重量衰减)和批大小的方法。他特别建议采用1 Cycle policy来调整学习率。

前提,先找到最大的学习速率max_lr,使用LRFinder-for-Keras中的方法。
我们使用较低的学习速度作为最大学习速度的1/5或1/10。
我们在步骤1中从较低的学习率到较高的学习率,然后在步骤2中回到较低的学习率。我们选择这个周期长度略小于要训练的周期总数。在最后的迭代中,我们将学习率大大低于较低的学习率值(1/10或1/100)。

其背后的动机是,在学习过程中,当学习速率较高时,学习速率作为正则化方法发挥作用,防止网络过度拟合。

代码:

import numpy as np
import keras
from keras import backend as K
from keras.callbacks import *class CyclicLR(keras.callbacks.Callback):def __init__(self,base_lr, max_lr, step_size, base_m, max_m, cyclical_momentum):self.base_lr = base_lrself.max_lr = max_lrself.base_m = base_mself.max_m = max_mself.cyclical_momentum = cyclical_momentumself.step_size = step_sizeself.clr_iterations = 0.self.cm_iterations = 0.self.trn_iterations = 0.self.history = {}def clr(self):cycle = np.floor(1+self.clr_iterations/(2*self.step_size))if cycle == 2:x = np.abs(self.clr_iterations/self.step_size - 2*cycle + 1)          return self.base_lr-(self.base_lr-self.base_lr/100)*np.maximum(0,(1-x))else:x = np.abs(self.clr_iterations/self.step_size - 2*cycle + 1)return self.base_lr + (self.max_lr-self.base_lr)*np.maximum(0,(1-x))def cm(self):cycle = np.floor(1+self.clr_iterations/(2*self.step_size))if cycle == 2:x = np.abs(self.clr_iterations/self.step_size - 2*cycle + 1) return self.max_melse:x = np.abs(self.clr_iterations/self.step_size - 2*cycle + 1)return self.max_m - (self.max_m-self.base_m)*np.maximum(0,(1-x))def on_train_begin(self, logs={}):logs = logs or {}if self.clr_iterations == 0:K.set_value(self.model.optimizer.lr, self.base_lr)else:K.set_value(self.model.optimizer.lr, self.clr())if self.cyclical_momentum == True:if self.clr_iterations == 0:K.set_value(self.model.optimizer.momentum, self.cm())else:K.set_value(self.model.optimizer.momentum, self.cm())def on_batch_begin(self, batch, logs=None):logs = logs or {}self.trn_iterations += 1self.clr_iterations += 1self.history.setdefault('lr', []).append(K.get_value(self.model.optimizer.lr))self.history.setdefault('iterations', []).append(self.trn_iterations)if self.cyclical_momentum == True:self.history.setdefault('momentum', []).append(K.get_value(self.model.optimizer.momentum))for k, v in logs.items():self.history.setdefault(k, []).append(v)K.set_value(self.model.optimizer.lr, self.clr())if self.cyclical_momentum == True:K.set_value(self.model.optimizer.momentum, self.cm())

使用:

batch_size = train_config.BATCH_SIZE
epochs = train_config.NB_EPOCHS
max_lr = 0.01 ##
base_lr = max_lr/10
max_m = 0.98
base_m = 0.85cyclical_momentum = True
augment = True
cycles = 2.35iterations = round(len(train)/batch_size*epochs)
iterations = list(range(0,iterations+1))
step_size = len(iterations)/(cycles)clr =  CyclicLR(base_lr=base_lr,max_lr=max_lr,step_size=step_size,max_m=max_m,base_m=base_m,cyclical_momentum=cyclical_momentum)
callbacks_list = [clr]

参考

  1. The 1cycle policy
  2. Finding Good Learning Rate and The One Cycle Policy
  3. github1
  4. github2
  5. kaggle

【调参】Cyclic Learning Rates和One Cycle Policy-Keras相关推荐

  1. 强化学习中的调参经验与编程技巧(on policy篇)

    ©PaperWeekly 原创 · 作者|张恒瑞 单位|北京交通大学 研究方向|强化学习 在强化学习的训练过程中,常常会遇见以下问题: 在某一环境中可以 work 的超参数拿去训练别的环境却训练不出来 ...

  2. 你有哪些 Deep learning(RNN、CNN)调参的经验?

    来自 | 知乎-hzwer,北京大学 https://www.zhihu.com/question/41631631/answer/859040970 编辑 | 机器学习算法与自然语言处理,Dataw ...

  3. 你有哪些deep learning(rnn、cnn)调参的经验?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 No.1 总结一下在旷视实习两年来的炼丹经验,我主要做了一些 RL ...

  4. 速看!deep learning(rnn、cnn)调参的经验

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|视觉算法 话说三人行,必有我师焉.有哪些deep lea ...

  5. Deep Learning Tuning Playbook(深度学习调参手册中译版)

    前言 由五名研究人员和工程师组成的团队发布了<Deep Learning Tuning Playbook>,来自他们自己训练神经网络的实验结果以及工程师的一些实践建议,目前在Github上 ...

  6. 调参经验: 关于deep learning(rnn、cnn)

    点击上方"机器学习与生成对抗网络",关注星标 获取有趣.好玩的前沿干货! https://www.zhihu.com/question/330766768 编辑:机器学习算法与知识 ...

  7. 这些deep learning(rnn、cnn)调参的经验值得分享

    由于机器学习(包括神经网络)调参的经验内容比较多,我的回答篇幅会较长些,我尽量浓缩每个知识点,欢迎各位讨论指点. 深度神经网络,尤其是卷积神经网络(CNN)允许由多个隐藏层组成的计算模型来学习具有多个 ...

  8. 写给新手:2021版调参上分手册!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:山竹小果,来源:夕小瑶的卖萌屋 在日常调参的摸爬滚打中,参考了不少 ...

  9. 深度学习调参tricks总结!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:山竹小果,来源:NewBeeNLP 寻找合适的学习率(learni ...

  10. 写给新手炼丹师:2021版调参上分手册

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨山竹小果 来源丨夕小瑶的卖萌屋 编辑丨极市平台 导读 在日常调 ...

最新文章

  1. 秒杀系统架构分析与实战,一文带你搞懂秒杀架构!
  2. 现代软件工程 作业 团队冲刺阶段的要求
  3. 查询数据库,处理NULL值问题
  4. pandas.to_csv()中文编码问题
  5. 作用域、执行环境、作用域链
  6. HTML5本地存储之Web Storage篇
  7. SkyEye图形化界面使用技巧篇(一)
  8. 【面试题总结】2、反转字符串的几种形式
  9. 利用小程序快速生成App,只需七步
  10. 简单编写图书管理系统
  11. IT人士必去的10个网站 .
  12. 机器学习第四课:SVM前置知识点(凸优化问题)
  13. python小游戏《孙悟空大战白骨精》 (循环的练习)
  14. 什么是阿里云Intel Xeon(Ice Lake) Platinum 8369B服务器?
  15. 分步傅里叶算法_快速分步傅里叶算法,split-step fast Fourier transform,音标,读音,翻译,英文例句,英语词典...
  16. Python3:简单的服务器(socketserver + MySQL)
  17. 程序的text,data,bss,stack,heap
  18. 【总结】2022GDOI普及组 没得游记
  19. php个人发展计划,教师个人发展计划
  20. 认识,保罗·克鲁格曼

热门文章

  1. log4j教程 11、日志记录到文件
  2. php数组的概述及分类与声明
  3. [转]OAuth 认证步骤
  4. Android:Toolbar的图标尺寸问题
  5. 在ubuntu16.04-32bits 下编译vlc和vlc-qt开源项目
  6. 从零开始搭建框架SSM+Redis+Mysql(一)之摘要
  7. Grails里的集成测试代码试例
  8. Android类似日历的翻转控件
  9. 半监督学习入门基础(一)
  10. RNN, Seq2Seq, Attention注意力机制完全解析