赞
踩
每次重新运行代码之后,学习率会重置,导致学习率过高从而开始升高损失。
yolov5的学习率下降模型,是one_cycle.
def one_cycle(y1=0.0, y2=1.0, steps=100):
# lambda function for sinusoidal ramp from y1 to y2
return lambda x: ((1 - math.cos(x * math.pi / steps)) / 2) * (y2 - y1) + y1
图片长下面这样。
学习率又会有一次升高回落的过程。
采用其他的学习率方法,如余弦退火,线性降低等。
在train.py中,将代码修改如下情况即可(采用了余弦退火,同时承接了上次one_cycle的学习率最小值),便于继续训练。
# Scheduler
if opt.linear_lr:
lf = lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp['lrf']) + hyp['lrf'] # linear
else:
#lf = one_cycle(1, hyp['lrf'], epochs) # cosine 1->hyp['lrf']
lf = lambda x: ((1 + math.cos(x * math.pi / epochs)) / 2) * 0.1 + 0.005
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) # plot_lr_scheduler(optimizer, scheduler, epochs)
参考 :
OneCycleLR学习率的原理与使用
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。