zoukankan      html  css  js  c++  java
  • pytorch 模型不同部分使用不同学习率

    ref: https://blog.csdn.net/weixin_43593330/article/details/108491755

    在设置optimizer时, 只需要参数分为两个部分, 并分别给定不同的学习率lr。

    base_params = list(map(id, net.backbone.parameters()))
    logits_params = filter(lambda p: id(p) not in base_params, net.parameters())
    params = [
        {"params": logits_params, "lr": config.lr},
        {"params": net.backbone.parameters(), "lr": config.backbone_lr},
    ]
    optimizer = torch.optim.SGD(params, momentum=config.momentum, weight_decay=config.weight_decay)
    

    需要注意的是没有单独设置如果params中没有单独加上"lr"则默认使用全局学习率。需要注意,这里base_params的list其实是这些参数的id地址,是int值,不可直接用于optimizer进行优化。

    1、选择要调整的学习率对应的层,这里以conv5为例

    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)
    

    2、如果要调整多个层的学习率,以conv4和conv5为例

    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())
    params = [{'params': base_params},
              {'params': net.conv5.parameters(), 'lr': lr * 100},
              {'params': net.conv4.parameters(), 'lr': lr * 100}]
    optimizer = torch.optim.SGD(params, lr=lr, momentum=0.9)
    
  • 相关阅读:
    08月24日总结
    08月23日总结
    08月22日总结
    装饰器
    卢菲菲最强大脑记忆训练法全套教程 01
    LeetCode 704 二分查找
    LeetCode 1480 一维数组的动态和
    NIO 总结
    LeetCode 881 救生艇
    url的组成部分
  • 原文地址:https://www.cnblogs.com/wioponsen/p/13885158.html
Copyright © 2011-2022 走看看