Pytorch框架学习(11)——优化器

1. 什么是优化器

pytorch的优化器:管理并更新模型中可学习参数的值,使得模型输出更接近真实标签

  • 基本属性
    • defaults:优化器超参数
    • state:参数的缓存,如momentum的缓存
    • param_groups:管理的参数组(list)
    • _step_count:记录更新次数,学习率调整中使用
      在这里插入图片描述
  • 基本方法
    • zero_grad():清空所管理参数的梯度,因为pytorch特性:张量梯度不自动清零
    • step():执行一步更新
    • add_param_group():添加参数组
    • state_dict():获取有乎其当前状态信息字典
    • load_state_dict():加载状态信息字典

2. 学习率与动量

  • 梯度下降: w i + 1 = w i − g ( w i ) w_{i+1} = w_i - g(w_i) wi+1=wig(wi)

  • 学习率:控制更新的步伐。
    增加学习率之后的梯度下降公式为: w i + 1 = w i − L R ∗ g ( w i ) w_{i+1} = w_i - LR*g(w_i) wi+1=wiLRg(wi)

  • 动量(Momentum):结合当前梯度与上一次更新信息,用于当前更新
    增加动量之后的梯度下降公式为:
    v i = m ∗ v i − 1 + g ( w i ) v_i = m * v_{i-1} + g(w_i) vi=mvi1+g(wi)
    w i + 1 = w i − l r ∗ v i w_{i+1} = w_i - lr * v_i wi+1=wilrvi
    其中 g ( w i ) 表 示 w i 的 梯 度 , m 为 m o m e n t u m 系 数 , v i 表 示 更 新 量 , l r 表 示 学 习 率 , w i + 1 表 示 第 i + 1 次 更 新 的 参 数 g(w_i)表示w_i的梯度, m为momentum系数, v_i表示更新量,lr表示学习率,w_{i+1}表示第i+1次更新的参数 g(wi)wimmomentumvilrwi+1i+1

3. torch.optim.SGD

  • optim.SGD
    • 主要参数:
      • params:管理的参数组(list)
      • lr:初试学习率
      • momentum:动量系数,贝塔
      • weight_decay:L2正则化系数
      • nesterov:是否采用NAG

4. 优化器

  1. optim.SGD:随机梯度下降法
  2. optim.Adagrad:自适应学习率梯度下降法
  3. optim.RMSprop:Adagrad的改进
  4. optim.Adadelta:Adagrad的改进
  5. optim.Adam:RMSprop结合Momentum
  6. optim.Adamax:Adam增加学习率上限
  7. optim.SparseAdam:稀疏版Adam
  8. optim.ASGD:随机平均梯度下降
  9. optim.Rprop:弹性反向传播
    10.optim.LBFGS:BFGS的改进

5. 作业

优化器的作用是管理并更新参数组,请构建一个SGD优化器,通过add_param_group方法添加三组参数,三组参数的学习率分别为 0.01, 0.02, 0.03, momentum分别为0.9, 0.8, 0.7,构建好之后,并打印优化器中的param_groups属性中的每一个元素的key和value(提示:param_groups是list,其每一个元素是一个字典)

w1 = torch.randn((2, 2), requires_grad=True)
w2 = torch.randn((2, 2), requires_grad=True)
w3 = torch.randn((2, 2), requires_grad=True)
w1.grad = torch.ones((2, 2))

optimizer = optim.SGD([w1], lr=0.01, momentum=0.9)
optimizer.add_param_group({"params": w2, 'lr': 0.02, 'momentum': 0.8})
optimizer.add_param_group({"params": w3, 'lr': 0.03, 'momentum': 0.7})

print("optimizer.param_groups is\n{}".format(optimizer.param_groups))

执行结果:

[{'params': [tensor([[0.6614, 0.2669],
        [0.0617, 0.6213]], requires_grad=True)], 'lr': 0.01, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False}, {'params': [tensor([[-0.4519, -0.1661],
        [-1.5228,  0.3817]], requires_grad=True)], 'lr': 0.02, 'momentum': 0.8, 'dampening': 0, 'weight_decay': 0, 'nesterov': False}, {'params': [tensor([[-1.0276, -0.5631],
        [-0.8923, -0.0583]], requires_grad=True)], 'lr': 0.03, 'momentum': 0.7, 'dampening': 0, 'weight_decay': 0, 'nesterov': False}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aidanmomo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值