网络优化策略:根据epoch自适应比例学习率衰减

1、介绍

如下,我们经常会看到很多类似下面这种loss突然下降很多的情况,这是由于学习率衰减的原因导致网络的性能更好,相比于cos衰减,这里的衰减是自己控制的

2、代码介绍

这里用到了两个参数,分别如下

milestones : 在哪几个epoch衰减

gamma : 衰减的倍率是多少

这里简单测试一下:

总共训练100伦,在epoch = 50和90的时候,lr每次衰减为之前的0.1

绘制的结果如下:

3、测试代码

 如下:

import argparse
import torch
import matplotlib.pyplot as plt
import torch.nn as nn  # 神经网络库
import torch.nn.functional as F  # 函数功能库,如relu、sigmoid等等


class Net(nn.Module):  # 继承父类
    def __init__(self):
        super(Net, self).__init__()
        self.conv = nn.Conv2d(3, 6, 5)
        self.fc = nn.Linear(6 * 5 * 5, 2)

    def forward(self, x):
        x = F.max_pool2d(F.relu(self.conv(x)), 2)
        x = x.view(x.shape[0], -1)
        x = self.fc(x)
        return x


def main(args):

    model = Net()
    optimizer = torch.optim.SGD(model.parameters(), lr=args.lr)

    scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer,milestones=args.lr_steps, gamma=args.lr_gamma)

    lr_list =[]
    for epoch in range(args.epochs):
        # train one epoch
        scheduler.step()            # 更新学习率

        # evaluate
        lr = optimizer.param_groups[0]["lr"]
        lr_list.append(lr)         # 记录学习率数值

    # 绘图
    plt.figure(figsize=(12,8))
    plt.plot(lr_list)
    plt.show()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="test")
    parser.add_argument('--epochs', default=100, type=int)
    parser.add_argument('--lr', default=0.1, type=float)
    parser.add_argument('--lr-steps', default=[50,90], nargs='+', type=int,help='decrease lr every step-size epochs')
    parser.add_argument('--lr-gamma', default=0.1, type=float, help='decrease lr by a factor of lr-gamma')
    args = parser.parse_args()
    print(args)

    main(args)

 

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值