【PyTorch】crnn-finetune模型学习率调整策略
1. 网络模型
2.不同层设置不同学习率
这里以adam优化器为例
#不同层设置不同的学习率
train_params = list(map(id,crnn.rnn.parameters())) #20
rest_params = filter(lambda x:id(x) not in train_params, crnn.parameters()) #20#print('22222222222222222222:', len(list(rest_params)))# loss averager
loss_avg = utils.averager() #对loss取平均对象# setup optimizer
if opt.adam:#对不同层设置不同学习率#optimizer = optim.Adam(crnn.parameters(), lr=opt.lr,# betas=(opt.beta1, 0.999))#optimizer = torch.nn.DataParallel(optimizer, device_ids=range(opt.ngpu))### weight_decay防止过拟合的参数optimizer = optim.Adam([{'params':crnn.rnn[0].rnn.parameters(),'lr':0.0000001,'betas':(0.5,0.999)},{'params':crnn.rnn[0].embedding.parameters(),'lr':0.0000001,'betas':(0.5,0.999)},{'params':crnn.rnn[1].rnn.parameters(),'lr':0.0000001,'betas':(0.5,0.999)},{'params':crnn.rnn[1].embedding.parameters(),'lr':opt.lr,'betas':(0.5,0.999)},{'params':rest_params,'lr':opt.lr,'betas':(0.5,0.999)}])
3. 训练过程更新学习率
上述我们只对rnn网络进行训练,并对最后一层进行lr的更新。
def adjust_learning_rate(optimizer, epoch):"""Sets the learning rate to the initial LR decayed by 10 every 5 epochs"""lr = opt.lr * (0.1 ** (epoch // 5))#for param_group in optimizer.param_groups: #每一层的学习率都会下降optimizer.param_groups[3]['lr'] = lrfor epoch in range(opt.nepoch):######每5个epoch修改一次学习率(只修改最后一个全连接层)adjust_learning_rate(optimizer, epoch)
4. cnn层冻结
for p in crnn.named_parameters():p[1].requires_grad = Trueif 'rnn' in p[0]: #训练rnn层 #训练最后一层 #rnn rnn.1.embeddingp[1].requires_grad = Trueelse:p[1].requires_grad = False##冻结模型层crnn.train()
【PyTorch】crnn-finetune模型学习率调整策略相关推荐
- PyTorch学习之六个学习率调整策略
PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 a. 有序调整:等间隔调整(Step),按需调整学习率( ...
- 【深度学习】图解 9 种PyTorch中常用的学习率调整策略
learning rate scheduling 学习率调整策略 01 LAMBDA LR 将每个参数组的学习率设置为初始lr乘以给定函数.当last_epoch=-1时,将初始lr设置为初始值. t ...
- pytorch优化器学习率调整策略以及正确用法
优化器 optimzier优化器的作用:优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用. 从优化器的作用出发,要使得优化器能够起作用,需要主要两个东西: ...
- Pytorch —— 学习率调整策略
1.为什么要调整学习率 学习率控制梯度更新的快慢,在训练中,开始时的学习率比较大,梯度更新步伐比较大,后期时学习率比较小,梯度更新步伐比较小. 梯度下降:wi+1=wi−g(wi)w_{i+1}=w_ ...
- PyTorch框架学习十四——学习率调整策略
PyTorch框架学习十四--学习率调整策略 一._LRScheduler类 二.六种常见的学习率调整策略 1.StepLR 2.MultiStepLR 3.ExponentialLR 4.Cosin ...
- PyTorch的六个学习率调整
本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击:https://github.com/tensor-yu/PyTorch_Tutorial 文章目录 一.pytorc ...
- YOLOv5-优化器和学习率调整策略
优化器和学习率调整策略 pytorch-优化器和学习率调整 这个链接关于优化器和学习率的一些基础讲得很细,还有相关实现代码 优化器 前向传播的过程,会得到模型输出与真实标签的差,我们称之为损失, 有了 ...
- keras train_on_batch详解(train_on_batch的输出输入详解,train_on_batch多GPU训练详解,自定义学习率调整策略)
利用 train_on_batch 精细管理训练过程 大部分使用 keras 的同学使用 fit() 或者 fit_generator() 进行模型训练, 这两个 api 对于刚接触深度学习的同学非常 ...
- 【DL】——Warmup学习率调整策略
1. warmup的必要性 原理这部分转载自: 神经网络中 warmup 策略为什么有效:有什么理论解释么? 那么在什么时候可能不成立呢?论文[3]告诉我们有两种情况: 在训练的开始阶段,模型权重迅速 ...
最新文章
- 使用ultraedit和cl编译器打造简易c/c++开发环境
- 老版本select2设置初始值
- STM32中NVIC_SystemReset()函数的作用?什么时候用?
- 大型互联网网站架构心得之:分、并、换
- MFC的模块状态:从AfxGetApp()和AFX_MANAGE_STATE()看MFC的模块状态
- centos7卸载docker_使用 Docker 部署 Spring Cloud 项目详细步骤
- linphone支持 G729
- js根据文字获取首字母案例,直接复制在html中即可查看效果
- java发布帖子_第一篇发在javaeye的帖子
- matlab读取nc数据的某一列数据库,科学网—.nc数据读取详细资料matlab2010a及后面的版本 - 张凌的博文...
- java类的使用方法小结_JavaPoet的使用指南小结
- 智利车厘子的尺寸说明,给大家扫盲
- 解决使用vscode写typescript变量报错无法重新声明块范围变量
- 天津高清卫星影像数据包下载
- Qt5 实现文件复制并在指定路径下创建文件夹
- 带感小说:程序员坐牢会被安排写代码吗?
- MySQL之IN的优化
- php microtime()函数
- 如何下载 MySQL安装包
- 『姑苏 · 踏青』:诗情未尽在苏杭