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()

 

posted @ 2022-12-20 22:50  kuaqi  阅读(165)  评论(0编辑  收藏  举报