pytorch四种学习率衰减策略

  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。
'''

例:

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. 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. 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)
''''

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)

'''

pytorch四种学习率衰减策略_第1张图片
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,则忽略此次更新
'''

你可能感兴趣的:(learning,rate,pytorch,人工智能,python)