当前位置:   article > 正文

pytorch四种学习率衰减策略_lr_scheduler.multisteplr

lr_scheduler.multisteplr
  1. MultiStepLR()
  • 指定区间进行学习率衰减
torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)
'''
Args:
	1)milestones为一个数组,如 [50,70];列表中的值必须是增长的.
	2)gamma,Default: 0.1.,如果learning rate开始为0.01 ,则当epoch为50时变为0.001,epoch 为70 时变为0.0001。
	3)last_epoch,最后一个迭代epoch的索引. Default: -1。当last_epoch=-1,设定为初始lr。
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例:

criterion = nn.CrossEntropyLoss()  # 损失函数为交叉熵,多用于多分类问题
optimizer = optim.SGD(net.parameters(), lr=LR, momentum=0.9, weight_decay=5e-4)  # 优化方式为mini-batch momentum-SGD,并采用L2正则化(权重衰减)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[75, 125, 165], gamma=0.1, last_epoch=-1)
......
for epoch in range(epochs):
	...
	for idx, (inputs,labels) in enumerate(train_dataloader,0):
		...
		optimizer.step()
		...
	scheduler.step()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. LambdaLR()
  • 自定义学习率
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
'''
Args:
	optimizer = optim.SGD(params = model.parameters(), lr=0.05)
	lambda2 = lambda epoch:0.2 ** epoch
	也可把lr_lambda声明成一个函数
	scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda2)
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. StepLR()
  • 每次相隔固定区间学习率衰减
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

'''
Args:
	step_size:间隔步长
	gamma:衰减倍数
	#即每10次迭代,lr = lr * gamma
	optimizer = optim.SGD(params = model.parameters(), lr=0.05)
	scheduler = lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)
''''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

scheduler.step()

  1. CosineAnnealingLR()
  • 余弦衰减
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
'''
Args:
	T_max:半个周期
	eta_min:学习率最小值
	optimizer = Adam(model.parameters(),lr = LR)
	scheduler = lr_scheduler.CosineAnnealingLR(optimizer, T_max = 20)

'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

请添加图片描述
5. ReduceLROnPlateau
在发现loss不再降低或者acc不再提高之后,降低学习率。

torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
'''
Args:
	mode: 'min'模式检测metric是否不再减小,'max'模式检测metric是否不再增大;
	factor:	触发条件后lr*=factor;
	patience: 不再减小(或增大)的累计次数;
	verbose: 触发条件后print;
	threshold: 只关注超过阈值的显著变化;
	threshold_mode: 有rel和abs两种阈值计算模式,rel规则:max模式下如果超过best(1+threshold)为显著,min模式下如果低于best(1-threshold)为显著;abs规则:max模式下如果超过best+threshold为显著,min模式下如果低于best-threshold为显著;
	cooldown: 触发一次条件后,等待一定epoch再进行检测,避免lr下降过速;
	min_lr: 最小的允许lr;
	eps: 如果新旧lr之间的差异小与1e-8,则忽略此次更新
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/349748
推荐阅读
相关标签
  

闽ICP备14008679号