赞
踩
可以借助于torch.optim.lr_scheduler
类来进行调整;torch.optim.lr_schedule
r模块提供了一些根据epoch
训练次数来调整学习率(learning rate)
的方法。一般情况下我们会设置随着epoch
的增大而逐渐减小学习率从而达到更好的训练效果。
下面介绍了一种调整策略机制:StepLR机制;
函数原型:
class torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
更新过程:
等间隔调整学习率,调整倍数为gamma倍,调整间隔为step_size。间隔单位是step。需要注意的是,step通常是指epoch,不要弄成iteration了
参数:
实例程序:
import torch import torch.nn as nn from torch.optim.lr_scheduler import StepLR import itertools initial_lr = 0.1 class model(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3) def forward(self, x): pass net_1 = model() optimizer_1 = torch.optim.Adam(net_1.parameters(), lr = initial_lr) scheduler_1 = StepLR(optimizer_1, step_size=3, gamma=0.1) print("初始化的学习率:", optimizer_1.defaults['lr']) for epoch in range(1, 11): # train optimizer_1.zero_grad() optimizer_1.step() print("第%d个epoch的学习率:%f" % (epoch, optimizer_1.param_groups[0]['lr'])) scheduler_1.step()
运行结果:
初始化的学习率: 0.1
第1个epoch的学习率:0.100000
第2个epoch的学习率:0.100000
第3个epoch的学习率:0.100000
第4个epoch的学习率:0.010000
第5个epoch的学习率:0.010000
第6个epoch的学习率:0.010000
第7个epoch的学习率:0.001000
第8个epoch的学习率:0.001000
第9个epoch的学习率:0.001000
第10个epoch的学习率:0.000100
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。