pytorch在不同的层使用不同的学习率

原创 2018年04月15日 15:41:51

pytorch在不同的层使用不同的学习率

有时候我们希望某些层的学习率与整个网络有些差别,这里我简单介绍一下在pytorch里如何设置,方法略麻烦,如果有更好的方法,请务必教我:

首先我们定义一个网络:

class net(nn.Module):
    def __init__(self):
        super(net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, 1)
        self.conv2 = nn.Conv2d(64, 64, 1)
        self.conv3 = nn.Conv2d(64, 64, 1)
        self.conv4 = nn.Conv2d(64, 64, 1)
        self.conv5 = nn.Conv2d(64, 64, 1)
    def forward(self, x):
        out = conv5(conv4(conv3(conv2(conv1(x)))))
        return out

我们希望conv5学习率是其他层的100倍,我们可以:

net = net()
lr = 0.001

conv5_params = list(map(id, net.conv5.parameters()))
base_params = filter(lambda p: id(p) not in conv5_params,
                     net.parameters())
optimizer = torch.optim.SGD([
            {'params': base_params},
            {'params': net.conv5.parameters(), 'lr': lr * 100},
, lr=lr, momentum=0.9)

如果多层,则:

conv5_params = list(map(id, net.conv5.parameters()))
conv4_params = list(map(id, net.conv4.parameters()))
base_params = filter(lambda p: id(p) not in conv5_params + conv4_params,
                     net.parameters())
optimizer = torch.optim.SGD([
            {'params': base_params},
            {'params': net.conv5.parameters(), 'lr': lr * 100},
            {'params': net.conv4.parameters(), 'lr': lr * 100},
            , lr=lr, momentum=0.9)

Torch7入门续集补充(2)--- 每一层设置不同的学习率(finetuning有用)

设置不同学习率
  • Hungryof
  • Hungryof
  • 2017-09-14 18:43:23
  • 783

pytorch给同一个layer的weight和bias设置不同的学习速率

经过在pytorch论坛的提问https://discuss.pytorch.org/t/how-to-set-different-learning-rate-for-weight-and-bias-...
  • elysion122
  • elysion122
  • 2018-03-19 16:53:36
  • 131

Pytorch框架下Finetune注意点

最近在参加AI challenger的比赛(虽然九月就开始的比赛,到11月才开始玩。。。)结局无所谓,就希望在过程中能学习一些东西,由于场景识别比赛的finetune模型权重都是torch下的,之前尝...
  • xjcvip007
  • xjcvip007
  • 2017-11-20 16:41:29
  • 1222

【tensorflow】在不同层上设置不同的学习率,fine-tuning

最近一直在研究tensorflow的fine-tuning,TF关于fine-tuning这块的资料真的没有Caffe多。经过这几天的琢磨,差不多也明白了。感谢网上为数不多的开源资料。主要方法有如下两...
  • shwan_ma
  • shwan_ma
  • 2017-12-23 20:20:46
  • 1168

tensorflow使用不同的学习率

tensorflow使用不同的学习率 var_list1 = [variables from first 5 layers] var_list2 = [the rest of var...
  • liyaohhh
  • liyaohhh
  • 2017-08-09 13:08:38
  • 1657

PyTorch学习系列(十)——如何在训练时固定一些层?

有时我们会用其他任务(如分类)预训练好网络,然后固定卷积层作为图像特征提取器,然后用当前任务的数据只训练全连接层。那么PyTorch如何在训练时固定底层只更新上层呢?这意味着我们希望反向传播计算梯度时...
  • VictoriaW
  • VictoriaW
  • 2017-05-27 10:52:34
  • 5796

pytorch学习笔记(十):learning rate decay(学习率衰减)

pytorch learning rate decay本文主要是介绍在pytorch中如何使用learning rate decay. 先上代码:def adjust_learning_rate(o...
  • u012436149
  • u012436149
  • 2017-04-24 22:06:45
  • 5697

tensorflow 恢复指定层与不同层指定不同学习率

#tensorflow 中从ckpt文件中恢复指定的层或将指定的层不进行恢复: #tensorflow 中不同的layer指定不同的学习率 with tf.Graph().as_default():...
  • LIYUAN123ZHOUHUI
  • LIYUAN123ZHOUHUI
  • 2017-04-07 17:13:37
  • 3591

5种控制变量可学习性的方法(PyTorch)

5种控制变量可学习性的方法(PyTorch)
  • StepLeave
  • StepLeave
  • 2017-03-04 10:40:01
  • 2216

keras 设置学习率的办法

错误的方法: model.optimizer.lr.assign(0.01) model(X,y,nb_epoch=50) 正确的方法: import keras.backend a...
  • lujiandong1
  • lujiandong1
  • 2017-08-03 10:37:46
  • 2698
收藏助手
不良信息举报
您举报文章:pytorch在不同的层使用不同的学习率
举报原因:
原因补充:

(最多只允许输入30个字)