关于optimizer优化器与scheduler策略调整器
上面是SGD优化器的一个使用实例,经过实例化后,optimizer会产生一个列表param_groups,列表中的每个元素param_group是一个字典,以param_group[‘params’]的形式对应model.parameters()的每一层参数,除此之外,还以param_group[‘lr’]的形式对应上面的args.lr等等。
如下所示:
这时,传入的参数parameters已经是一个字典列表,他的每个元素parameter已经包括了parameter[‘lr’]了,这时候实例化SGD时传入的args.lr就不会起作用了(传入的lr只在字典中没有lr键值的时候会创建并传入,当字典已经有键值及对应元素后,会跳过),所以这种情况下,每层参数的学习率实际上已经由之前定好的学习率设定好了,args.lr只是一个摆设,不起实际作用。
上述情况通常发生在,对已有预训练网络进行微调后,网络改动部分往往需要更大的学习率,因此整个网络来说,学习率不是完全一样的,需要针对不同层设计不同的学习率,这时通过初始化SGD时传入初始学习率的一刀切办法就不适用了。
调用optimizer.step()即可实现网络参数的更新
这里有一篇比较好的博客,介绍的挺好
举个例子,如下:
将optimizer作为参数传递给scheduler,每次通过调用scheduler.step()就会更新optimizer中每一个param_group[‘lr’],具体更新策略是什么呢?对于StepLR策略调整器来说, l r n e w = l r i n i t i a l ? g a m m a e p o c h / / s t e p s i z e lr_{new} = lr_{initial} * gamma^{epoch//stepsize} lrnew?=lrinitial??gammaepoch//stepsize,即每过固定个epoch,学习率会按照gamma倍率进行衰减。
也可以不使用scheduler策略调整器,就实现optimizer的学习率调整,如下:
相当于手动修改optimizer中的param_group[‘lr’],使用时调用函数如下:
注意:pytorch1.1之后,scheduler.step()调用需要在optimizer.step()之后
栏 目:正则表达式
本文标题:关于optimizer优化器与scheduler策略调整器
本文地址:http://chang365.com/index.php?a=index&aid=297&c=View&m=home
您可能感兴趣的文章
- 05-20时评:优化营商环境,凝聚高质量发展动能
- 05-20第 44 章 第 44 章
- 05-20《Python智能优化算法:从原理到代码实现与应用》出版啦
- 05-13关于优化营商环境典型经验和创新举措的通报
- 05-1320210703 WSN-拓扑控制
- 05-13抖音下载的游戏安装包在哪找_1
- 05-06Xcode 15
- 05-06统计显示 全球游戏音频制作者北美收入最高
- 05-06抖音极速版2023下载
- 04-29用更优的营商环境为高质量发展赋能
阅读排行
推荐教程
- 11-22php正则判断是否为合法身份证号的方法
- 01-02游戏王决斗链接:决斗者之路活动开启,三张好卡速速来拿!
- 11-23正则验证不能含有中文的实现方法
- 02-01抖音充值
- 11-22正则表达式\W元字符使用方法
- 02-17抖音中的福袋怎么查看?福袋中奖记录在哪里找?
- 03-04抖音怎么挂餐饮优惠券?
- 11-282022年最新抖音橱窗小黄车0粉丝开通的几种方法
- 12-12小红书将上线餐饮团购!想从美团、抖音“虎口夺食”?
- 11-22正则表达式判定保留2位小数的实现代码