您现在的位置是:首页 >技术杂谈 >PyTorch实战5:运动鞋识别之动态学习率网站首页技术杂谈
PyTorch实战5:运动鞋识别之动态学习率
简介PyTorch实战5:运动鞋识别之动态学习率
- ? 本文为?365天深度学习训练营 中的学习记录博客
- ? 参考文章:365天深度学习训练营-第P5周:运动鞋识别
- ? 原作者:K同学啊|接辅导、项目定制
目录
本次实战主要学习内容:
- 了解如何设置动态学习率(重点)
一、设置动态学习率
动态学习率的设置
def adjust_learning_rate(optimizer, epoch, start_lr):
# 每 2 个epoch衰减到原来的 0.98
lr = start_lr * (0.92 ** (epoch // 2))
for param_group in optimizer.param_groups:
param_group['lr'] = lr
learn_rate = 1e-4 # 初始学习率
optimizer = torch.optim.SGD(model.parameters(), lr=learn_rate)
✨调用官方动态学习率接口
与上面方法是等价的
# 调用官方动态学习率接口时使用
lambda1 = lambda epoch: 0.92 ** (epoch // 2)
optimizer = torch.optim.SGD(model.parameters(), lr=learn_rate)
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1) #选定调整方法
正式训练动态学习率的使用
- 使用自定义学习率时使用
# 更新学习率
adjust_learning_rate(optimizer, epoch, learn_rate)
- 调用官方动态学习率接口时使用
# 更新学习率
scheduler.step()
二、动态学习率
1. torch.optim.lr_scheduler.StepLR
等间隔动态调整方法,每经过step_size个epoch,做一次学习率decay,以gamma值为缩小倍数。
函数原型:
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
关键参数详解:
● optimizer(Optimizer):是之前定义好的需要优化的优化器的实例名
● step_size(int):是学习率衰减的周期,每经过每个epoch,做一次学习率decay
● gamma(float):学习率衰减的乘法因子。Default:0.1
用法示例:
optimizer = torch.optim.SGD(net.parameters(), lr=0.001 )
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)
2. lr_scheduler.LambdaLR
根据自己定义的函数更新学习率。
函数原型:
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)
关键参数详解:
● optimizer(Optimizer):是之前定义好的需要优化的优化器的实例名
● lr_lambda(function):更新学习率的函数
用法示例:
lambda1 = lambda epoch: (0.92 ** (epoch // 2) # 第二组参数的调整方法
optimizer = torch.optim.SGD(model.parameters(), lr=learn_rate)
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1) #选定调整方法
3. lr_scheduler.MultiStepLR
在特定的 epoch 中调整学习率
函数原型:
torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1, verbose=False)
关键参数详解:
● optimizer(Optimizer):是之前定义好的需要优化的优化器的实例名
● milestones(list):是一个关于epoch数值的list,表示在达到哪个epoch范围内开始变化,必须是升序排列
● gamma(float):学习率衰减的乘法因子。Default:0.1
用法示例:
optimizer = torch.optim.SGD(net.parameters(), lr=0.001 )
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer,
milestones=[2,6,15], #调整学习率的epoch数
gamma=0.1)
?调用官方接口示例
model = [Parameter(torch.randn(2, 2, requires_grad=True))]
optimizer = SGD(model, 0.1)
scheduler = ExponentialLR(optimizer, gamma=0.9)
for epoch in range(20):
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
scheduler.step()
更多的官方动态学习率设置方式可参考:https://pytorch.org/docs/stable/optim.html
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。