pytorch怎么用学习率warming up_深度学习训练tricks整理1

58e6a6d0049fffb465266c6f47641e3d.png

深度学习训练tricks整理1

环境:pytorch1.4.0 + Ubuntu16.04

参考:

数据增强策略(一)​mp.weixin.qq.com
5467719623aeb6604d8a867827495a7b.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
27f9b38273249af38810f9b55befe6f3.png

代码链接:

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

982239536f8b5858fca51893eafad941.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

6ff7e6ebabf27a1b669f060c297ac47a.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
27f9b38273249af38810f9b55befe6f3.png

代码参考:

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

1140e1e9a7f1e4ba70b0237ecac32f8d.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

58a6b62cbab9b1357caff47ffac6e834.png
GridMask示意图

1.2 多图组合

1.Mixup

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

论文参考:

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

理解与代码参考:

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

79971ca3ad0f735ff0cc3508b07b74c2.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
f04d93773848807440e61e65a0b42a4f.png

133404b2392fa1d51a3f9bbb3fe5fae0.png
Cutmix示意图

3.Mosaic data augmentation(用于检测)

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

代码参考:

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

e241d7427acaac16d66ea8d020e9cfe4.png
Mosaic data augmentation示意图

二、Label Smoothing

  1. label smoothing

参考论文:

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

参考理解:

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

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

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

代码:

class 

三、学习率调整

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 

四、蒸馏(distillation)

4.1 传统蒸馏

论文参考:

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

理解参考:

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

19f820665303f9c0b1d05f9a1844c5f3.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

a3ffcd7cf04d2826f6f264b94c45c7eb.png
通道蒸馏示意图
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch 中,可以通过访问优化器对象(optimizer object)来查看当前的学习。优化器对象通常在训练循环中使用,用于更新模型参数。以下是一个查看当前学习的示例代码: ```python import torch.optim as optim # 定义一个模型和一个优化器 model = MyModel() optimizer = optim.Adam(model.parameters(), lr=0.001) # 查看当前学习 print(optimizer.param_groups[0]['lr']) ``` 在上面的示例代码中,`optimizer.param_groups` 是一个列表,其中的每个元素都代表一个参数组,包含了该参数组对应的学习等信息。由于我们只有一个参数组,因此我们可以通过访问 `optimizer.param_groups[0]` 来获取该参数组的信息,然后通过 `'lr'` 键来获取当前的学习。 要调整模型训练学习,可以通过修改优化器对象中的学习来实现。以下是一个调整学习的示例代码: ```python import torch.optim as optim # 定义一个模型和一个优化器 model = MyModel() optimizer = optim.Adam(model.parameters(), lr=0.001) # 调整学习 new_lr = 0.0001 for param_group in optimizer.param_groups: param_group['lr'] = new_lr ``` 在上面的示例代码中,我们首先定义了一个模型和一个优化器,并将学习设置为 0.001。然后,我们通过遍历优化器对象中的参数组,并修改 `'lr'` 键来将学习调整为 0.0001。需要注意的是,由于优化器对象中可能包含多个参数组,因此我们需要遍历所有的参数组才能将学习调整到我们希望的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值