应用场景:图像分类 (使用CIFAR10作为测试数据集,ResNet18作为Backbone网络)

数据预处理 (resize_val = 224, n_holes = 1, length在原有的size=32时候为16)

# Image Preprocessing
normalize = transforms.Normalize(mean=[x / 255.0 for x in [125.3, 123.0, 113.9]],std = [x / 255.0 for x in [63.0, 62.1, 66.7]])train_transform = transforms.Compose([])
if args.resize_val != -1:train_transform.transforms.append(transforms.Resize((args.resize_val,args.resize_val)))train_transform.transforms.append(transforms.RandomCrop(args.resize_val, padding=4))
train_transform.transforms.append(transforms.RandomHorizontalFlip())
train_transform.transforms.append(transforms.ToTensor())
train_transform.transforms.append(normalize)
train_transform.transforms.append(Cutout(n_holes=args.n_holes, length=args.length))test_transform = transforms.Compose([transforms.Resize((args.resize_val,args.resize_val)),transforms.ToTensor(),normalize])

训练优化器和 lr decay方式 (lr =0.01,wd = 5e-4)

criterion = nn.CrossEntropyLoss()
cnn_optimizer = torch.optim.SGD(cnn.parameters(), lr=args.learning_rate,momentum=0.9, nesterov=True, weight_decay=args.wd)scheduler = MultiStepLR(cnn_optimizer, milestones=[60, 120, 160], gamma=0.2)

(1)从头训练 (from scratch): 直接按照上面的代码进行训练即可

(2)finetune all (没有冻结任何层)

    cnn.load_state_dict(torch.load(path))inchannel = cnn.fc.in_featurescnn.fc = nn.Linear(inchannel, args.num_class)

注意:

a) 在load_state_dict时候,应该使用默认的 1000 类(因为我用的imagenet1k的预训练参数),加载完后才改变成指定的 args.num_class

b) path指的是预训练的参数的地址:可以使用torchvision上提供好的(为了方便我也粘贴一下)

Resnet18: https://download.pytorch.org/models/resnet18-f37072fd.pth

Resnet34: https://download.pytorch.org/models/resnet34-b627a593.pth

Resnet50: https://download.pytorch.org/models/resnet50-0676ba61.pth

(3) linear probing (冻结了浅层)

    cnn.load_state_dict(torch.load(path))inchannel = cnn.fc.in_featurescnn.fc = nn.Linear(inchannel, args.num_class)for k, v in cnn.named_parameters():if k.split('.')[0] != 'fc':v.requires_grad = False 

但是linear层的微调性能远不如全部finetune,因为可变的层太少了,对于linear层而言,搞不定。

此外,需要注意的一点,我们若不加 .eval() 那么BN和Dropout是默认开的,训练时候如果浅层不参与训练但开着这些层,会让 fc 层更难。 所以我们可以:

cnn.eval()
cnn.fc.train()

微调(linear probing和 full finetune)技巧相关推荐

  1. 【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?

    文章目录 论文信息 1. 论文内容 2. 论文结论 2.1 微调流程 2.2 微调策略(Fine-Tuning Strategies) 2.3 Further Pretrain 3. 论文实验介绍 3 ...

  2. Caffe 模型微调 的场景、问题、技巧以及解决方案

    前言 什么是模型的微调?   使用别人训练好的网络模型进行训练,前提是必须和别人用同一个网络,因为参数是根据网络而来的.当然最后一层是可以修改的,因为我们的数据可能并没有1000类,而只有几类.把最后 ...

  3. 深度学习 Fine-tune 技巧

    深度学习中需要大量的数据和计算资源(乞丐版都需要12G显存的GPU - -)且需花费大量时间来训练模型,但在实际中难以满足这些需求,而使用迁移学习则能有效 降低数据量.计算量和计算时间,并能定制在新场 ...

  4. 本科生晋升GM记录: Kaggle比赛进阶技巧分享

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:Gary 知乎链接:https://zhuanlan.zhihu.com/p ...

  5. finetune代码实战讲解(李沐)

    这里要做的是热狗识别:即识别出是否是热狗,我们给了两个类别(正类:热狗,负类:香蕉) 备注:resnet18是 imagenet 数据集的预训练模型 finetune的全过程: import os i ...

  6. 字节约翰斯·霍普金斯上交提出iBOT框架,基于MIM进行自监督训练,在ImageNet-1K上达到86.3%的微调精度!...

    关注公众号,发现CV技术之美 ▊ 写在前面 语言Transformer的成功主要归功于masked language modeling(MLM) 的预训练任务,其中文本首先被标记为语义上有意义的片段. ...

  7. 本科生晋升GM记录 Kaggle比赛进阶技巧分享

    图灵TOPIA 来源:知乎 作者:@GaryLIU 图灵联邦编辑部 前言 本文作者@GaryLIU 从入坑kaggle到拿到GM仅用了一年多的时间,他表示自己的学习之路可以分成三个阶段,以下是他的经验 ...

  8. 老板让我用少量样本 finetune 模型,我还有救吗?急急急,在线等!

    文 | ???????????????? 编 | 王苏 今天介绍的是一篇 NAACL'21 新鲜出炉的工作!NAACL 上周四出的结果,这篇工作本周一上传 arxiv,周二被王苏小哥哥发现,周三拜读了 ...

  9. 优秀笔记课件——WORD使用技巧

    第三章 OFFICE 使用技巧  一. WORD 使用技巧  二. EXCEL 使用技巧  三. POWERPOINT 使用技巧 2 2 一.WORD 使用技巧 1 . Word 中实现自动翻页 ...

最新文章

  1. npm打包前端项目太慢问题分析以及暂时解决方案
  2. emacs python debug_我常用的 Python 调试工具 - 博客 - 伯乐在线
  3. 马斯克的SpaceX星链网遇散热危机,气温过高自动关机
  4. thymeleaf的url属性
  5. JQueryEasyUI学习笔记(一)
  6. 三维重建/SLAM笔记_最佳学习路线/攻略
  7. 全国计算机二级C语言考试难不难?应该怎么备考?
  8. 手工清除Windows服务器上的Steam挖矿病毒:HackTool/CoinMiner.a及Trojan/Miner.ac
  9. 一个好用的hibernate泛型dao
  10. 计算机单位厘米 像素,英尺和厘米的换算计算器 显示器的像素解析度可能不是...
  11. imazing是什么?iPhone苹果第三方iOS设备管理软件
  12. 用聚宽量化炒股-3常用对象
  13. AI 工程师职业指南
  14. 用java编写圆锥_用java中的graphics画圆锥的代码
  15. micropython RX8025T 驱动简单演示
  16. 每日C语言代码(The third day)——斐波那契(兔子数列)
  17. android AMS学习(一)
  18. 我的WafBypass之道(SQL注入篇)
  19. 如何实现在div上做出凸出效果。。。的导航栏。
  20. 【AI PC端算法优化】二,一步步优化自然饱和度算法

热门文章

  1. NodeJs下载安装使用介绍流程
  2. Bootstrap学习之模态框(Modal)插件
  3. 计算机毕业设计-快递跑腿网站系统 快递代拿管理系统【附远程调试+讲解+文档】
  4. Linux下的常用工具
  5. 开源项目-基于小熊派STM32红外热成像仪
  6. JAVA高并发的三种实现 Java高并发,如何解决,什么方式解决
  7. mysql重装系统后以前的数据_系统重装后,Mysql数据库重装加载原来数据库
  8. 交通运输部印发《城市公共交通“十三五”发展纲要》
  9. Xshell连接虚拟机(CentOS) ifconfig无法使用问题
  10. vue组件通信方式之eventBus