html制作静态网站模板,图片 展示 网站模板,菲斯曼售后服务中心,徐州做网站谁家最专业pytorch技巧总结1#xff1a;学习率调整方法 前言 这个系列#xff0c;我会把一些我觉得有用、有趣的关于pytorch的小技巧进行总结#xff0c;希望可以帮助到有需要的朋友。 免责申明 本人水平有限#xff0c;若有误写、漏写#xff0c;请大家温柔的批评指正。 目录…pytorch技巧总结1学习率调整方法 前言 这个系列我会把一些我觉得有用、有趣的关于pytorch的小技巧进行总结希望可以帮助到有需要的朋友。 免责申明 本人水平有限若有误写、漏写请大家温柔的批评指正。 目录结构 文章目录 pytorch技巧总结1学习率调整方法1. 用处2. 通过epoch次数和优化器来调节2.1 思路来源2.2 调整案例 3. pytorch提供的方法3.1 方法介绍3.2 调整案例 4. 保存参数后再次训练4.1 思路4.2 调整案例 5. 总结 1. 用处
学习率的调整在深度学习中是很重要的一块。而身为一个初学者肯定会进行一些经典架构的代码复现因此必定会涉及到如何实现论文中所说的“学习率调整”一般通常是训练到一定程度学习率除以10
因此本篇文章就是简单的总结一些我目前见过的学习率调整方法。
2. 通过epoch次数和优化器来调节
2.1 思路来源
首先介绍的第一个方法是比较常用的方法即通过epoch的次数和优化器来调节。
主要流程为
1. 开始训练
2. 当训练到指定epoch时调整学习率
3. 继续训练 其中的优化器指的就是我们所认知的“Adam、SGD”等优化器。
这里主要利用的是这些优化器有一个参数名为param_groups打印该参数值如下
print(optim_G.param_groups) 打印的值如下
[{params: [Parameter containing:......这些是具体的参数值], lr: 0.002, betas: (0.5, 0.999), eps: 1e-08, weight_decay: 0, amsgrad: False, maximize: False, foreach: None, capturable: False, differentiable: False, fused: False}] 可以从上面看出这是一个列表里面包含了一个字典这个字典里面有我们需要的学习率参数即上面的lr。
因此我们需要获取它然后改变它即可完成学习率的调整。
2.2 调整案例
根据上面的想法我下面给出调整学习率的一个模板大家使用的时候按照这个模板即可
......
# 开始训练
for e in range(epoch):# 50 这些数字根据自己的需求修改即可if e1 50: # 如果训练到第50个批次那么可以调整学习率# 调整学习率# 首先获取列表中第一个字典然后获取学习率参数# 最后将这个学习率除以10或者改为你需要的学习率即可optim.param_groups[0][lr] / 10 ..... # 具体的训练代码3. pytorch提供的方法
上面的思路是我们根据优化器参数来实现的而pytroch官方肯定是知道学习率调整的重要性的因此他们也提供了方便快捷实现学习率调整的方法。
3.1 方法介绍
方法名字和位置
torch.optim.lr_scheduler.MultiStepLR 该方法的重要参数介绍
参数名字意义optimizer优化器对象milestones一个数组比如[50,80,100]表示第50、80、100批次的时候会自动调整学习率gamma指定倍率比如0.1表示后面调整学习率的时候自动乘以0.1即除以10
其实这个方法的调整思路和我们上面第一个方法是一样的不过这里实现更加方便。
3.2 调整案例
同样的下面我给出一个该方法的使用模板大家根据需求修改即可
....
optim .... # 定义优化器‘
# 创建学习率调整器
scheduler torch.optim.lr_scheduler.MultiStepLR(optim,milestones[50,75,100],gamma0.1)
# 开始训练
for e in range(epoch):.... # 正常的训练过程# 只是需要记住的是一般在epoch训练完成后在最后加上学习率更新的代码scheduler.step().... 值得一提的是pytorch提供的调整学习函数不只MultiStepLR还有一些其它的不过用法都类似如果大家有需求可以看看官方源码的介绍你即可。
4. 保存参数后再次训练
4.1 思路
这个方法不是很实用这是我在最开始学习的的时候对于pytorch的方法不熟悉的时候使用的思路。
即先指定训练一定的epoch然后保存模型参数接着修改模型学习率参数然后加载刚刚训练完的参数继续训练。
这个方法的好处就是当你在训练过程中发现训练的不好或者哪里有问题可以直接停止模型的训练因为你上次训练的参数已经保存了所以可以大胆的停止训练。
4.2 调整案例
同样给出一个简单的模板
.....
lr 0.01
.....
for e in range(epoch):.... # 正常训练
# 训练完毕后保存模型参数
torch.save(model.state_dict(),path)# 下次训练
# 1. 修改学习率
lr 0.001
# 2. 加载上次的模型参数
model.load_state_dict(torch.load(path))
# 3. 接着训练
......5. 总结
上面三种方法常用的是第二种。当然偶尔也是用用第一种和第三种。
如果后面我遇到新的调整学习率方法会及时更新该篇文章的。