训练深度学习_深度学习训练tricks整理1

b02bfb98a4659d7b7d657cfc488a0195.png

深度学习训练tricks整理1

环境:pytorch1.4.0 + Ubuntu16.04

参考:

数据增强策略(一)​mp.weixin.qq.com
58a3e21dbe344c1c91e8bcf1d3137a22.png
https://zhuanlan.zhihu.com/p/104992391​zhuanlan.zhihu.com
深度神经网络模型训练中的 tricks(原理与代码汇总)​mp.weixin.qq.com

一、data_augmentation

基本的数据增强调用torchvision.transforms库中的就可以了,我整理一下其他的。

参考:

Pytorch 中的数据增强方式最全解释​cloud.tencent.com

1.1 单图操作(图像遮挡)

1.Cutout

对CNN 第一层的输入使用剪切方块Mask

论文参考:

Improved Regularization of Convolutional Neural Networks with Cutout​arxiv.org
ec210a129ee942177cb65ebf0efd7c8c.png

代码链接:

https://github.com/uoguelph-mlrg/Cutout​github.com

cffffe16512de7833922287d2ba40f6d.png
Cutout示意图

2.Random Erasing

用随机值或训练集的平均像素值替换图像的区域

论文参考:

https://arxiv.org/abs/1708.04896​arxiv.org

代码参考:

https://github.com/zhunzhong07/Random-Erasing/blob/master/transforms.py​github.com

955e5f916bcfde43040c016694fe07a4.png
Random Erasing示意图

3.Hide-and-Seek

图像分割成一个由 SxS 图像补丁组成的网格,根据概率设置随机隐藏一些补丁,从而让模型学习整个对象的样子,而不是单独一块,比如不单独依赖动物的脸做识别。

论文参考:

Hide-and-Seek: Forcing a Network to be Meticulous for Weakly-supervised Object and Action Localization​arxiv.org
ec210a129ee942177cb65ebf0efd7c8c.png

代码参考:

https://github.com/kkanshul/Hide-and-Seek/blob/master/hide_patch.py​github.com

d1000a30f62bcf6e78aeb8d6b87ddb6f.png
Hide-and-Seek示意图

4.GridMask

将图像的区域隐藏在网格中,作用也是为了让模型学习对象的整个组成部分

论文参考:

https://arxiv.org/pdf/2001.04086.pdf​arxiv.org

代码参考:

https://github.com/Jia-Research-Lab/GridMask/blob/master/imagenet_grid/utils/grid.py​github.com

da83d364e1e13559c239d4ccb1e43ab3.png
GridMask示意图

1.2 多图组合

1.Mixup

通过线性叠加两张图片生成新的图片,对应label也进行线性叠加用以训练

论文参考:

https://arxiv.org/abs/1710.09412​arxiv.org

理解与代码参考:

目标检测中图像增强,mixup 如何操作?​www.zhihu.com
8eafbe5101fc8771ff677ba7668a038b.png

e1f719e8d730b85e7e72e47fb5649296.png
Mixup 示意图

2.Cutmix

将另一个图像中的剪切部分粘贴到当前图像来进行图像增强,图像的剪切迫使模型学会根据大量的特征进行预测。

论文参考:

https://arxiv.org/abs/1905.04899​arxiv.org

代码参考:

https://github.com/clovaai/CutMix-PyTorch/blob/master/train.py​github.com

代码理解:

模型训练技巧--CutMix_Guo_Python的博客-CSDN博客_cutmix loss​blog.csdn.net
b17f8f5a7afc53370097d230e13f46d9.png

b8605714e6ee19365f38a93cb6955e12.png
Cutmix示意图

3.Mosaic data augmentation(用于检测)

Cutmix中组合了两张图像,而在 Mosaic中使用四张训练图像按一定比例组合成一张图像,使模型学会在更小的范围内识别对象。其次还有助于显著减少对batch-size的需求。

代码参考:

https://zhuanlan.zhihu.com/p/163356279​zhuanlan.zhihu.com

cf5cd9e4a2de3df31fede5fdc9a2b608.png
Mosaic data augmentation示意图

二、Label Smoothing

  1. label smoothing

参考论文:

https://arxiv.org/pdf/1812.01187.pdf​arxiv.org

参考理解:

SoftMax原理介绍 及其 LabelSmooth优化​blog.csdn.net
8e825eb1fc4d0334ce444d8af9dddd6a.png
标签平滑Label Smoothing​blog.csdn.net
0fa78975d1adce1a3512090eb415ca63.png
https://zhuanlan.zhihu.com/p/148487894​zhuanlan.zhihu.com

在多分类训练任务中,输入图片经过神经网络的计算,会得到当前输入图片对应于各个类别的置信度分数,这些分数会被softmax进行归一化处理,最终得到当前输入图片属于每个类别的概率,最终在训练网络时,最小化预测概率和标签真实概率的交叉熵,从而得到最优的预测概率分布.

网络会驱使自身往正确标签和错误标签差值大的方向学习,在训练数据不足以表征所以的样本特征的情况下,这就会导致网络过拟合。label smoothing的提出就是为了解决上述问题。最早是在Inception v2中被提出,是一种正则化的策略。其通过"软化"传统的one-hot类型标签,使得在计算损失值时能够有效抑制过拟合现象。

代码:

class LabelSmoothCEloss(nn.Module):def __init__(self):super().__init__()def forward(self,  pred,  label,  smoothing=0.1):pred = F.softmax(pred,  dim=1)one_hot_label = F.one_hot(label, pred.size(1)).float()smoothed_one_hot_label = (1.0 - smoothing)  *  one_hot_label + smoothing / pred.size(1)loss = (-torch.log(pred))  *  smoothed_one_hot_labelloss = loss.sum(axis=1,  keepdim=False)loss = loss.mean()return loss
----------------------------------------------------------------------------------------------
调用时criterion = nn.CrossEntropyLoss()
改为criterion = LabelSmoothCELoss()

三、学习率调整

warm up最早来自于这篇文章:https://arxiv.org/pdf/1706.02677.pdf 。根据这篇文章,我们一般只在前5个epoch使用warm up。consine learning rate来自于这篇文章:https://arxiv.org/pdf/1812.01187.pdf 。通常情况下,把warm up和consine learning rate一起使用会达到更好的效果。 代码实现:

class WarmUpLR(_LRScheduler):"""warmup_training learning rate schedulerArgs:optimizer: optimzier(e.g. SGD)total_iters: totoal_iters of warmup phase"""def __init__(self, optimizer, total_iters, last_epoch=-1):self.total_iters = total_iterssuper().__init__(optimizer, last_epoch)def get_lr(self):"""we will use the first m batches, and set the learningrate to base_lr * m / total_iters"""return [base_lr * self.last_epoch / (self.total_iters + 1e-8) for base_lr in self.base_lrs]# MultiStepLR without warm up
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=args.milestones, gamma=0.1)# warm_up_with_multistep_lr
warm_up_with_multistep_lr = lambda epoch: epoch / args.warm_up_epochs if epoch <= args.warm_up_epochs else 0.1**len([m for m in args.milestones if m <= epoch])
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=warm_up_with_multistep_lr)# warm_up_with_cosine_lr
warm_up_with_cosine_lr = lambda epoch: epoch / args.warm_up_epochs if epoch <= args.warm_up_epochs else 0.5 * ( math.cos((epoch - args.warm_up_epochs) /(args.epochs - args.warm_up_epochs) * math.pi) + 1)
scheduler = torch.optim.lr_scheduler.LambdaLR( optimizer, lr_lambda=warm_up_with_cosine_lr)

四、蒸馏(distillation)

4.1 传统蒸馏

论文参考:

https://arxiv.org/pdf/1503.02531.pdf​arxiv.org

理解参考:

深度学习方法(十五):知识蒸馏(Distilling the Knowledge in a Neural Network),在线蒸馏​blog.csdn.net
cef49000e6bcc26a632befea0d7a7428.png
知识蒸馏(Distilling Knowledge )的核心思想​blog.csdn.net
0fa78975d1adce1a3512090eb415ca63.png

3bad2e709d2aae70d15fee0f21fe05a8.png
传统蒸馏示意图
训练的过程采用以下的步骤:
先用硬标签训练大型复杂网络(Teacher Net);
采用值大的T,经训练好的 TN 进行前向传播获得软标签;
分别采用值大的 T 和 T=1 两种情况,让小型网络(Student Net)获得两种不同的输出,加权计算两种交叉熵损失,训练SN;
采用训练好的 SN 预测类别。

2. 新的蒸馏方式:通道蒸馏

论文参考:

Channel Distillation: Channel-Wise Attention for Knowledge Distillation​arxiv.org

代码参考:

https://github.com/zhouzaida/channel-distillation​github.com

5393721a16ff703b532180c4978802d1.png
通道蒸馏示意图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三个可能会被计算机视觉技术改变的行业

计算机视觉最主要的应用是面部识别&#xff0c;这种技术经常被用于安全和执法领域。但是&#xff0c;本文意在介绍一些计算机视觉技术不太明显的用途。来源丨Forbes作者丨Bernard Marr编译丨科技行者计算机视觉技术&#xff08;也被称为机器视觉&#xff09;允许机器以视觉方式…

没有数学何来计算机:论计算机起源的数学思想

来源&#xff1a;无数学 无计算机人类的历史可以看做一部关于解放的历史。也有这样的说法&#xff0c;懒惰是人类进步的动力。为了偷懒&#xff0c;人类不断的做着各种努力&#xff0c;发明了各种机器工具&#xff0c;将自己从繁重的劳动解放出来&#xff0c;另一方面&#xf…

复杂控件

1.自定义标题栏 1.1引入布局 步骤&#xff1a; 1&#xff09;写好布局 2&#xff09;在activity布局里面直接引用该布局 核心代码&#xff1a; 注意&#xff1a;如何将系统自带的标题栏去掉&#xff1a; 方法一&#xff1a;&#xff08;不一定灵&#xff09; 方法二&#xff1a…

​Arm芯片的新革命在缓缓上演

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译自「seekingalpha」&#xff0c;谢谢。因为苹果将发布使用其自研Arm芯片的Mac电脑&#xff0c;为此我认为基于ARM的芯片将蚕食 Intel和AMD的核心业务。这其实已经发生了&#xff0c;但是…

追踪“MATLAB被禁”:我们如何做出卡别人脖子的软件?

作者 | 包云岗&#xff08;中国科学院计算技术研究所研究员&#xff09;编辑 | 宗华排版 | 华园导 读最近&#xff0c;哈工大、哈工程被禁用工科神器Matlab一事引发持续讨论。6月19日&#xff0c;中科院计算所研究员包云岗在微博上分享了他在“CCF YOCSEF杭州Matlab被禁之特别…

拿下赌场新客户,但马斯克“超级隧道”何时才能颠覆地面交通?

来源&#xff1a;脑极体埃隆马斯克那家非常“Boring”的隧道公司&#xff0c;最近生意又热络了起来。据媒体报道&#xff0c;在5月份完成美国拉斯维加斯会议中心的两条地下隧道之后&#xff0c;埃隆马斯克的隧道公司&#xff08;Boring Company&#xff09;又接到了当地两家大型…

NOIP2016天天爱跑步 题解报告【lca+树上统计(桶)】

题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。天天爱跑步是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。 这个游戏的地图可以看作一一棵包含 nn个结点和 n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达。树…

人工智能发展简史

文章来源&#xff1a;人工智能和大数据 &#xff08;ID&#xff1a;AIANDBIGDATA&#xff09;人工智能是在1956年作为一门新兴学科的名称正式提出的&#xff0c;自此之后&#xff0c;它已经取得了惊人的成就&#xff0c;获得了迅速的发展&#xff0c;它的发展历史&#xff0c;可…

程序媛计划——python数据库

#实例&#xff1a;用数据库存储日记&#xff0c;实现日记本功能 #流程 #创建数据库 1 #coding:utf-8 2 import sqlite3 3 connectsqlite3.connect(test.db) 4 connect.close() #效果 #用sqlite3模块对数据库进行操作 1 #coding:utf-82 import sqlite33 #创建数据库4 connectsql…

国产半导体路在何方,瓦森纳与光刻机你了解多少

来源&#xff1a;PConline光刻机&#xff08;Mask Aligner&#xff09;是制造微机电、光电、二极体大规模集成电路的重要设备。一台光刻机主要包括了曝光系统和对准系统两个部分。光刻机能够利用曝光系统发射出的紫外线通过模版去除晶圆表面的保护膜&#xff0c;将器件或电路结…

linux实验总结及心得_安全实验室 | 内网渗透—Linux权限维持技巧总结

在上一篇文章中我们介绍了内网渗透中Windows环境下进行权限维持(点击阅读)的方式&#xff0c;本期我们将视角集中在Linux系统中继续对内网渗透中的权限维持方式进行探索。Linux也是在内网渗透中很常见的操作系统&#xff0c;但是其内部实现方式却与Windows有着本质的区别。我们…

深度学习模型并非“越大越好”,它可能引起气候变化问题

来源丨Forbes作者丨Rob Toews编译丨科技行者和当今的深度学习方法相比&#xff0c;我们大脑的效率高得不可思议。它们只有几磅重&#xff0c;大概只需要20瓦左右的能量消耗&#xff0c;这个能耗只能够给昏暗的灯泡供电。然而&#xff0c;它们代表了已知宇宙中最强大的智力形式。…

dismiss ios pop效果_iOS 动画框架pop使用方法

pop支持4种动画类型&#xff1a;弹簧动画效果、衰减动画效果、基本动画效果和自定义动画效果。弹簧动画效果1.效果图如下:2.控制器代码如下,首先用pod安装导入pop框架:#import "ViewController.h"#import interface ViewController ()endimplementation ViewControll…

万亿新基建,AI“芯”机遇在哪?| CCF-GAIR 2020

新基建中的5G、AI和智能计算等新一代高端芯片属于新赛道&#xff0c;需要构建全新生态。”来源&#xff1a;雷锋网自今年3月份提出&#xff0c;新基建就迅速成为了焦点。新基建涵盖5G基建、特高压、大数据中心、人工智能、工业互联网等七大领域。与以往基础设施建设的“铁公基”…

重磅!库克官宣苹果放弃英特尔,全面采用自研芯片,MAC迎来历史转折点

物联网智库 整理发布转载请注明来源和出处导 读苹果并没有完全放弃Intel平台的Mac&#xff0c;未来还会继续推出Intel版的Mac&#xff0c;两种平台会并行发展。不过&#xff0c;随着苹果陆续将英特尔处理器换成自研ARM芯片&#xff0c;两年过渡期后的苹果仍启用英特尔处理器的…

微信小程序开源Demo精选

来自&#xff1a;http://www.jianshu.com/p/0ecf5aba79e1 文&#xff0f;weapphome&#xff08;简书作者&#xff09; 原文链接&#xff1a;http://www.jianshu.com/p/0ecf5aba79e1 著作权归作者所有&#xff0c;转载请联系作者获得授权&#xff0c;并标注“简书作者”。 1. 仿…

不输GPS!30颗卫星全部就位!北斗三号全球卫星导航星座部署顺利收官

随着此次发射的成功&#xff0c;北斗三号30颗组网卫星已全部到位&#xff0c;北斗三号全球卫星导航系统星座部署全面完成。来源&#xff1a;澎湃新闻视频&#xff1a;多角度直击北斗三号全球系统“收官之星”发射瞬间&#xff0c;时长约1分12秒6月23日&#xff0c;由中国航天科…

Django ORM 数据库操作

比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一、DjangoORM 创建基本类型及生成数据库表结构 1、简介 2、创建数据库 表结构 二、Django ORM基本增删改查 1、表数据增删改查 2、表结构修改 三、Django ORM 字段类型 1、字段类型介绍 2、字段参数介绍 3…

AI芯片的另一条路

来源&#xff1a;半导体行业观察在先进工艺和架构的协同下&#xff0c;芯片的性能在过去几年获得了爆发性的增长&#xff0c;尤其是在最近几年火热的人工智能行业&#xff0c;这个取得的成就是有目共睹的。据OpenAI在2018年年中发表的报告&#xff0c;自 2012 年以来&#xff0…

JavaScript之event事件

目录 1&#xff1a;事件驱动1 2&#xff1a;事件分类2 3&#xff1a;事件对象event3 4&#xff1a;关于鼠标事件对象属性3 应用&#xff1a;5 5&#xff1a;关于键盘事件对象的属性6 6&#xff1a;目标事件源对象7 7. 事件冒泡7 应用&#xff1a;8 CSS模拟下拉菜单。8 综合应用…