文章目录
本课程来自深度之眼deepshare.net,部分截图来自课程视频。
为什么要调整学习率?
学习率调整
梯度下降:
w
i
+
1
=
w
i
−
L
R
∗
g
(
w
i
)
w_{i+1}=w_i-LR*g(w_i)
wi+1=wi−LR∗g(wi)
学习率(learning rate)控制更新的步伐
和打高尔夫球一样,离洞远的时候要大力击打,离洞近,需要小力击打
如果学习率较大,则会出现下图中红色部分的结果,loss下降到一个点后就不再往下了,而是在某个区间震荡。
pytorch的六种学习率调整策略
class_LRScheduler
所有六种学习率调整策略都继承自该类。
主要属性:
·optimizer:关联的优化器,才能修改里面的学习率
·last_epoch:记录epoch数
·base_Irs:记录初始学习率
主要方法:
·step():更新下一个epoch的学习率,这个函数要放在epoch循环中,不要放错放到iteration里面。
·get_Ir():虚函数,计算下一个epoch的学习率
1.StepLR
功能:等间隔调整学习率
主要参数:
·step_size:调整间隔数,多个epoch调整一次学习率
·gamma:调整系数
调整方式:
L
r
=
L
r
∗
g
a
m
m
a
Lr=Lr*gamma
Lr=Lr∗gamma
2.MultiStepLR
功能:按给定间隔调整学习率
主要参数:
·milestones:设定调整时刻数,例如:milestones=[50,125,160]
·gamma:调整系数
调整方式:Ir=Ir*gamma
3.ExponentialLR
功能:按指数衰减调整学习率
主要参数:
·gamma:指数的底
调整方式:
L
r
=
L
r
∗
g
a
m
m
a
∗
∗
e
p
o
c
h
Lr=Lr*gamma**epoch
Lr=Lr∗gamma∗∗epoch
这个有点想动量加权平均的调整方式。
4.CosineAnnealingLR
功能:余弦周期调整学习率
主要参数:
·T_max:下降周期,需要多少个epoch从cos的最大变到最小,下面图是T_max=50
·eta_min:学习率下限,通常为0
调整方式:
η
t
=
η
m
i
n
+
1
2
(
η
m
a
x
−
η
m
i
n
)
(
1
+
c
o
s
(
T
c
u
r
T
m
a
x
π
)
)
\eta_t=\eta_{min}+\frac{1}{2}(\eta_{max}-\eta_{min})(1+cos(\frac{T_{cur}}{T_{max}}\pi))
ηt=ηmin+21(ηmax−ηmin)(1+cos(TmaxTcurπ))
5.ReduceLRonPlateau(很实用)
功能:监控指标,当指标不再变化则调整
主要参数:
·mode:min/max两种模式
·factor:调整系数
·patience:“耐心”,接受几次不变化
·cooldown:“冷却时间”,停止监控一段时间
·verbose:是否打印日志
·min_lr:学习率下限
·eps:学习率衰减最小值
loss_value=0.5
accuray=0.9
factor=0.1
mode="min"
patience=10
cooldown=10
min_lr=1e-4
verbose=True
输出解析:由于loss是常数,所以loss是不会变化的(这里的mode是min,也就是loss不下降就进行调整。),经过10个epoch后,到达了patience设置的10次,于是在第11个epoch进行学习率调整,按LR=LR*factor调。
然后经过cooldown,10个epoch,然后再经过patience,10个epoch,到达第32个epoch,再次进行学习率调整,
同理到达53个epoch再次调整,这次调整后达到了min_lr=1e-4,停止调整。
6.LambdaLR(最灵活)
功能:自定义调整策略
主要参数:
·Ir_lambda:function or list
可以对多个参数组的lr进行不同调整策略:
lr_init=0.1
weights_1=torch.randn((6,3,5,5))
weights_2=torch.ones((5,5))
optimizer=optim.SGD([{'param':[ weights_1]},
{'params':[ weights_2]}],lr=lr_init)
lambda1=lambda epoch:0.1**(epoch //20)
lambda2=lambda epoch:0.95 ** epoch
scheduler=torch.optim.lr_scheduler.LambdaLR(optimizer,Lrlambda=[ lambda1,lambda2])
学习率调整小结
1.有序调整:Step、MultiStep、Exponential和CosineAnnealing
2.自适应调整:ReduceLROnPleateau
3.自定义调整:Lambda
学习率初始化:
1.设置较小数:0.01、0.001、0.0001
2.搜索最大学习率:《Cyclical Learning Rates for Training Neural Networks》
TensorBoard简介与安装
TensorBoard:TensorFlow中强大的可视化工具
支持标量、图像、文本、音频、视频和Eembedding等多种数据可视化
TensorBoard机制是按以下三个步骤:
1.python脚本:记录可视化的数据
2.硬盘:event file
3.终端:tensorboard
最后可视化。
例如,先写以下脚本,然后运行(运行报错就安装相应的包)
安装注意事项
pip install tensorboard的时候会报错:
ModuleNotFoundError:No module named‘past’
通过pip install future解决
import numpy as np
from torch.utils.tensorboard import Summarlywriter
writer=Summaryuriter(comment='test tensorboard')
for x in range(100):
writer. add_scalar('y=2x',x*2,x)
writer. add_scalar('y=pow(2,x)',2**x,x)
writer. add_scalars('data/scalar_group',{"xsinx":x*np.sin(x),
"xcosx":x*np.cos(x),
"arctanx":np.arctan(x)},x)
writer.close()
在项目的目录下就生成event file:
在指定目录运行命令
点击链接就可以打开界面