pytorch中optim灵活设置各层的学习率

最近研究网络代码的时候,发现师姐的网络在优化的时候学习率是不完全相同的,如下面所示,于是想搞明白。

我平常设置学习率都是整个网络统一设置,

optimizer = torch.optim.SGD(net.parameters(), lr=0.5)
    optimizer = optim.SGD([
    # encoder-weights
    {'params': net.get_parameter_left_weights(net), 'lr': lr * 0.5},
    # encoder-bias
    {'params': net.get_parameter_left_bias(net, bias=True), 'lr': lr * 0.5},
    # decoder-weights
    {'params': net.get_parameter_right_weights(net), 'lr': lr},
    # decoder-bias
    {'params': net.get_parameter_right_bias(net, bias=True), 'lr': lr*2}

    ], lr=lr, momentum=0.9, weight_decay=0.0005)

首先设置一个简单的网络便于测试

class module(nn.Module):
    def __init__(self):
        super(module, self).__init__()
        self.features = nn.Conv2d(in_channels=3, out_channels=64, stride=1, kernel_size=3, padding=1)
        self.classifiter = nn.Conv2d(in_channels=64, out_channels=128, stride=1, kernel_size=3, padding=1)

    def forward(self, x):
        relu =nn.ReLU()
        x = self.features(x)
        x = self.classifiter(x)
        return relu(x)

我们可以分层设置,学习率,按照下面的格式

lr = 1
optimizer = torch.optim.SGD([{'params': net.features.weight, 'lr': lr * 0.5},
                             {'params': net.features.bias, 'lr': lr * 0.3},
                             {'params': net.classifiter.weight},
                              {'params': net.classifiter.bias}], lr=1e-5)
# print(net.features.weight)
# print(net.classifiter.weight)
print(optimizer)
SGD (
Parameter Group 0
    dampening: 0
    lr: 0.5
    momentum: 0
    nesterov: False
    weight_decay: 0

Parameter Group 1
    dampening: 0
    lr: 0.3
    momentum: 0
    nesterov: False
    weight_decay: 0

Parameter Group 2
    dampening: 0
    lr: 1e-05
    momentum: 0
    nesterov: False
    weight_decay: 0

Parameter Group 3
    dampening: 0
    lr: 1e-05
    momentum: 0
    nesterov: False
    weight_decay: 0
)

打印后看到结果,在关于features的字典中,我们注明了学习率,学习率就会按我们制定的;而在classifiter中没有注明学习率,学习率就会按后面默认的的。

经过测试,如果有的层不在optim中指出,在训练的时候就不会更新该层的参数

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值