pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现

【笔者感谢】:近期分享了秋招几十场的算法面经,感谢大家的阅读与点赞支持 秋招总结 | 一个非Top学校的跨专业的算法应届研究生的几十场面试 【新闻】:近期公众号读者交流群建立了“医学影像 炼丹分群”,群仅仅作为学术技术交流,禁广告,禁闲聊(闲聊可以去总群),需要加入的可以联系我。后续会建立自然语言处理,目标检测,金融等。

pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第1张图片

↑↑↑扫码加炼丹兄好友↑↑↑

<>

小白学PyTorch | 12 SENet详解及PyTorch实现

小白学PyTorch | 11 MobileNet详解及PyTorch实现

小白学PyTorch | 10 pytorch常见运算详解

小白学PyTorch | 9 tensor数据结构与存储结构

小白学PyTorch | 8 实战之MNIST小试牛刀

小白学PyTorch | 7 最新版本torchvision.transforms常用API翻译与讲解

小白学PyTorch | 6 模型的构建访问遍历存储(附代码)

小白学PyTorch | 5 torchvision预训练模型与数据集全览

小白学PyTorch | 4 构建模型三要素与权重初始化

小白学PyTorch | 3 浅谈Dataset和Dataloader

小白学PyTorch | 2 浅谈训练集验证集和测试集

小白学PyTorch | 1 搭建一个超简单的网络

小白学PyTorch | 动态图与静态图的浅显理解

这个系列《小白学PyTorch》的所有代码和数据集放在了公众号【机器学习炼丹术】后台,回复【pytorch】获取(还在更新的呢):

pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第2张图片

当然有什么问题、有事没事都可以找炼丹兄交流哈哈,炼丹兄就是一个非Top学校的跨专业应届研究生。

pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第3张图片

↑↑↑扫码加炼丹兄好友↑↑↑

参考目录:

  • 1 EfficientNet

    • 1.1 概述

    • 1.2 把扩展问题用数学来描述

    • 1.3 实验内容

    • 1.4 compound scaling method

    • 1.5 EfficientNet的基线模型

  • 2 PyTorch实现

efficientNet的论文原文链接: https://arxiv.org/pdf/1905.11946.pdf

模型扩展Model scaling一直以来都是提高卷积神经网络效果的重要方法。比如说,ResNet可以增加层数从ResNet18扩展到ResNet200。这次,我们要介绍的是最新的网络结构——EfficientNet,就是一种标准化的模型扩展结果,通过下面的图,我们可以i只管的体会到EfficientNet b0-b7在ImageNet上的效果:对于ImageNet历史上的各种网络而言,可以说EfficientNet在效果上实现了碾压pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第4张图片

1 EfficientNet

1.1 概述

一般我们在扩展网络的时候,一般通过调成输入图像的大小、网络的深度和宽度(卷积通道数,也就是channel数)。在EfficientNet之前,没有研究工作只是针对这三个维度中的某一个维度进行调整,因为没钱啊!!有限的计算能力,很少有研究对这三个维度进行综合调整的。

EfficientNet的设想就是能否设计一个标准化的卷积网络扩展方法,既可以实现较高的准确率,又可以充分的节省算力资源。因而问题可以描述成,如何平衡分辨率、深度和宽度这三个维度,来实现拘拿及网络在效率和准确率上的优化

EfficientNet给出的解决方案是提出了这个模型复合缩放方法 (compound scaling methed)pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第5张图片图a是一个基线网络,也就是我们所说的baseline,图b,c,d三个网络分别对该基线网络的宽度、深度、和输入分辨率进行了扩展,而最右边的e图,就是EfficientNet的主要思想,综合宽度、深度和分辨率对网络进行符合扩展。

1.2 把扩展问题用数学来描述

首先,我们把整个卷积网络称为N,他的第i个卷积层可以看作下面的函数映射:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第6张图片Yi是输出张量,Xi是输入张量,假设这个Xi的维度是(这里省略了Batch的维度),那么这个整个卷积网络N,是由k个卷积层组成的,因此可以表示为:9be42eda40916dae72e0a6236d5f327e.png通常情况,一个神经网络会有多个相同的卷积层存在,因此,我们称多个结构相同的卷积层为一个stage。举个例子:ResNet可以分为5个stage,每一个stage中的卷积层结构相同(除了第一层为降采样层),前四个stage都是baseblock,第五个stage是fc层。不太理解的可以看这个:【从零学习PyTorch】 如何残差网络resnet作为pre-model +代码讲解+残差网络resnet是个啥

总之,我们以stage为单位,将上面的卷积网络N改成为:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第7张图片其中,下表1...s表示stage的讯号,Fi表示对第i层的卷积运算,Li的意思是Fi在第i个stage中有Li个一样结构的卷积层。表示第i层输入的shape。为了减小搜索空间,作者先固定了网络的基本结构,而只改变上面公式中的三个缩放维度。还记得之前我们提高的分辨率,宽度,深度吗?

  • Li就是深度,Li越大重复的卷积层越多,网络越深;
  • Ci就是channel数目,也就是网络的宽度
  • Hi和Wi就是图片的分辨率 就算如此,这也有三个参数要调整,搜索空间也是非常的大,因此EfficientNet的设想是一个卷积网络所有的卷积层必须通过相同的比例常数进行统一扩展,这句话的意思是,三个参数乘上常熟倍率。所以个一个模型的扩展问题,就用数学语言描述为:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第8张图片其中,d、w和r分别表示网络深度、宽度和分辨率的倍率。这个算式表现为在给定计算内存和效率的约束下,如何优化参数d、w和r来实现最好的模型准确率。

1.3 实验内容

上面问题的难点在于,三个倍率之间是由内在联系的,比如更高分辨率的图片就需要更深的网络来增大感受野的捕捉特征。因此作者做了两个实验(实际应该是做了很多的实验)来说明:(1) 第一个实验,对三个维度固定了两个,只方法其中一个,得到的结果如下:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第9张图片从左到右分别是只放大了网络宽度(width,w为放大倍率)、网络深度(depth,d为放大倍率)和图像分辨率(resolution, r为放大倍率)。我们可以看到,单个维度的放大最高精度只有80左右,本次实验,作者得出一个管带你:三个维度中任一维度的放大都可以带来精度的提升,但是随着倍率的越来越大,提升越来越小。(2)于是作者做了第二个实验,尝试在不同的d,r组合下变动w,得到下图:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第10张图片从实验结果来看,最高精度相比之前已经有所提升,突破了80大关。而且组合不同,效果不同。作者又得到了一个观点:得到了更高的精度以及效率的关键是平衡网络的宽度,网络深度,网络分辨率三个维度的缩放倍率

1.4 compound scaling method

这时候作者提出了这个方法 EfficientNet的规范化复合调参方法使用了一个复合系数,来对三个参数进行符合调整:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第11张图片其中的都是常数,可以通过网格搜索获得。复合系数通过人工调节。考虑到如果网络深度翻番那么对应的计算量翻番,网络宽度和图像分辨率翻番对应的计算量会翻4番,卷积操作的计算量与,成正比,。在这个约束下,网络的计算量大约是之前的倍


以上就是EfficientNet的复合扩展的方式,但是这仅仅是一种模型扩展方式,我们还没有讲到EfficientNet到底是一个什么样的网络。

1.5 EfficientNet的基线模型

EfficientNet使用了MobileNet V2中的MBCConv作为模型的主干网络,同时也是用了SENet中的squeeze and excitation方法对网络结构进行了优化。 MBCConv是mobileNet中的基本结构,关于什么是MBCconv在百度上很少有解释,通过阅读论文和Google这里有一个比较好的解释:

The MBConv block is nothing fancy but an Inverted Residual Block (used in MobileNetV2) with a Squeeze and Excite block injected sometimes.

MBCconv就是一个MobileNet的倒残差模块,但是这个模块中还封装了Squeeze and Excite的方法。

总之呢,综合了MBConv和squeeze and excitation方法的EfficientNet-B0的网络结构如下表所示:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第12张图片对于EfficientNet-B0这样的一个基线网络,如何使用复合扩展发对该网络进行扩展呢?这里主要是分两步走:还记得这个规划问题吗?pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第13张图片(1)第一步,先将复合系数固定为1,先假设有两倍以上的计算资源可以用,然后对进行网络搜索。对于EfficientNet-B0网络,在约束条件为

时,分别取1.2,1.1和1.15时效果最佳。第二步是固定,通过复合调整公式对基线网络进行扩展,得到B1到B7网络。于是就有了开头的这一张图片,EfficientNet在ImageNet上的效果碾压,而且模型规模比此前的GPipe小了8.4倍。pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第14张图片

普通人来训练和扩展EfficientNet实在过于昂贵,所以对于我们来说,最好的方法就是迁移学习,下面我们来看如何用PyTorch来做迁移学习。

2 PyTorch实现

之前也提到了,在torchvision中并没有加入efficientNet所以这里我们使用某一位大佬贡献的API。有一个这样的文件Efficient_PyTorch,里面存放了b0到b8的预训练模型存储文件,我们将会调用这个API。因为这里我们没有直接使用pip进行安装,所以需要将这个库函数设置成系统路径。Pycharm中很多朋友会踩着个坑,不知道如何设置成系统路径:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第15张图片

pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第16张图片点击Sources Root之后,就可以直接import了。

整个代码非常少,因为都写成API接口了嘛:

from efficientnet_pytorch import EfficientNet
model = EfficientNet.from_name('efficientnet-b0')
print(model)

打印的模型可以看,我加了详细的注解(快夸我):pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第17张图片

整个b0的结构和论文中的结构相同:pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第18张图片从上图中可以知道,总共有16个MBConv模块;在第16个时候的输出通道为320个通道;pytorch打印模型参数_小白学PyTorch | 13 EfficientNet详解及PyTorch实现_第19张图片从运行结果来看,结构相同。总之这就是EfficientNet的结构,原理和调用方式。

- END -

我只是想试试这个广告能带来多少收益,所有收益会变成粉丝群里的红包(我不指望公众号,我只是广告费的搬运工哈哈)

<>

小白学论文 | EfficientNet强在哪里

小白学论文 | 神经网络初始化Xavier

小白学论文 | 端侧神经网络GhostNet(2019)

小白学目标检测 | RCNN, SPPNet, Fast, Faster

小白学图像 | BatchNormalization详解与比较

小白学图像 | Group Normalization详解+PyTorch代码

小白学图像 | 八篇经典CNN论文串讲

图像增强 | CLAHE 限制对比度自适应直方图均衡化

小白学卷积 | 深入浅出卷积网络的平移不变性

小白学卷积 | (反)卷积输出尺寸计算

损失函数 | 焦点损失函数 FocalLoss 与 GHM

<>

小白学ML | 随机森林 全解 (全网最全)

小白学SVM | SVM优化推导 + 拉格朗日 + hingeLoss

小白学LGB | LightGBM = GOSS + histogram + EFB

小白学LGB | LightGBM的调参与并行

小白学XGB | XGBoost推导与牛顿法

评价指标 | 详解F1-score与多分类F1

小白学ML | Adaboost及手推算法案例

小白学ML | GBDT梯度提升树

小白学优化 | 最小二乘法与岭回归&Lasso回归

小白学排序 | 十大经典排序算法(动图)

杂谈 | 正态分布为什么如此常见

Adam优化器为什么被人吐槽?

机器学习不得不知道的提升技巧:SWA与pseudo-label

<>

【小白面经】快手 AI算法岗 附答案解析

【小白面经】 拼多多 AI算法岗 附带解析

【小白面经】八种应对样本不均衡的策略

【小白面经】之防止过拟合的所有方法

【小白面经】梯度消失爆炸及其解决方法

【小白面经】 判别模型&生成模型

<>

【小白健身 】背阔大作战(下)

【小白健身】背阔大作战(上)

【小白健身】徒手健身40个动作(gif)

【小白健身】弹力带轻度健身gif动图

你可能感兴趣的:(pytorch打印模型参数,pytorch打印网络结构)