pytorch快速搭建卷积神经网络【优化器_第2课_优化器基类_Optimizer】

文章目录


理论

认识 Optimizer 的方法之前,需要了解一个概念,叫做参数组(param_groups)。在 finetune,某层定制学习率,某层学习率置零操作中,都会设计参数组的概念,因此首先 了解参数组的概念非常有必要。

optimizer 对参数的管理是基于组的概念,可以为每一组参数配置特定的 lr,momentum,weight_decay 等等。

参数组在 optimizer 中表现为一个 list(self.param_groups),其中每个元素是 dict,表示一个参数及其相应配置,在 dict 中包含’params’、‘weight_decay’、‘lr’ 、 'momentum’等字段。

源码

# coding: utf-8

import torch
import torch.optim as optim


w1 = torch.randn(2, 2)
w1.requires_grad = True

w2 = torch.randn(2, 2)
w2.requires_grad = True

w3 = torch.randn(2, 2)
w3.requires_grad = True

# 一个参数组
optimizer_1 = optim.SGD([w1, w3], lr=0.1)
print('len(optimizer.param_groups): ', len(optimizer_1.param_groups))
print(optimizer_1.param_groups, '\n')

# 两个参数组
optimizer_2 = optim.SGD([{'params': w1, 'lr': 0.1},
                         {'params': w2, 'lr': 0.001}])
print('len(optimizer.param_groups): ', len(optimizer_2.param_groups))
print(optimizer_2.param_groups)

运行

len(optimizer.param_groups):  1
[{'params': [tensor([[0.3673, 0.6950],
                     [0.4002, 0.1766]], requires_grad=True),
             tensor([[0.8128, 0.6266],
                    [-0.5585,-0.3550]], requires_grad=True)], 
                    'lr': 0.1, 'momentum': 0, 'dampening': 0, 
                    'weight_decay': 0, 'nesterov': False}] 

len(optimizer.param_groups):  2
[{'params': [tensor([[0.3673, 0.6950],
                     [0.4002, 0.1766]], requires_grad=True)], 
                     'lr': 0.1, 'momentum': 0, 'dampening': 0, 
                     'weight_decay': 0, 'nesterov': False}, 
                     
 {'params': [tensor([[ 1.3287,  0.8475],
                     [ 0.2672, -2.6240]], requires_grad=True)], 
                     'lr': 0.001, 'momentum': 0, 'dampening': 0, 
                     'weight_decay': 0, 'nesterov': False}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【网络星空】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值