pytorch 优化器、学习率更新器
一、
二、学习率更新
1、官方函数
1)milestones:lr改变时的epoch数目
2)gamma:学习率调整倍数,默认为0.1,即下降10倍
3)last_epoch:别人解释是已经运行的epoch数量!所以下一次更新lr的时候是milestones中值减去last_epoch
torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=- 1, verbose=False)
2、应用:
1)fasterrcnn(torchvision)
lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=args.lr_steps, gamma=args.lr_gamma)
if lr_scheduler is not None:
lr_scheduler.step()
3、疑问
1)参数last_epoch的应用场景,有人说是resume时,不过从下面代码中每看出来!具体还是看lr_scheduler如何更新lr的,是计数运行多少个epoch后更新,还是根据当前epoch大小进行更新!
if args.resume:
checkpoint = torch.load(args.resume, map_location="cpu")
model_without_ddp.load_state_dict(checkpoint["model"])
optimizer.load_state_dict(checkpoint["optimizer"])
# resume时,lr_scheduler加载参数
lr_scheduler.load_state_dict(checkpoint["lr_scheduler"])
#
args.start_epoch = checkpoint["epoch"] + 1
if args.amp:
scaler.load_state_dict(checkpoint["scaler"])
# resume时,epoch是从args.start_epoch开始的
for epoch in range(args.start_epoch, args.epochs):
if args.distributed:
train_sampler.set_epoch(epoch)
train_one_epoch(model, optimizer, data_loader, device, epoch, args.print_freq, scaler)
lr_scheduler.step()