第五周深度学习总结

ShuffleNet  

ShuffleNet V1

GConv虽然能够减少参数与计算量,但是GConv中不同组之间信息没有交流。ShuffleNet V1网络增加了channel shuffle的思想,ShuffleNet Unit中全是GConv和DWConv。如下图:

 经过分析发现在ResNeXt网络中1×1卷积的计算量占据了大部分,故ShuffleNet V1网络中都换成了1×1GConv,如下图:

 ShuffleNet V1网络结构

 网络参数对比

ShuffleNet V2

网络的计算复杂度不能仅仅只看FLOPs,在ShuffleNet V2的论文中提出了四条设计高效网络的准则,并设计了新的block运用在ShuffleNet V2网络中。

模型速度影响因素:

  • 直接的:speed
  • 间接的:FLOPs
  • 其他因素:memory access cost、degree of parallelism、platform

设计高效网络四条准则

G1: Equal channel width minimizes memory access cost (MAC)

G2: Excessive group convolution increases MAC 

G3: Network fragmentation reduces degree of parallelism

G4: Element-wise operations are non-negligible

总结:1)使用平衡的convolutions(即输入输出特征矩阵channel比值尽可能为1)

           2)注意组卷积的计算成本

           3)减少网络的碎片化程度

           4)减少使用Element-wise operations

ShuffleNet V2网络设计

EfficientNet

Google团队2019发表的文章,本文提出的EfficientNet网络在之前的一些论文中,有的会通过增加网络的width即增加卷积核的个数(增加特征矩阵的channels)来提升网络的性能如图(b)所示,有的会通过增加网络的深度即使用更多的层结构来提升网络的性能如图(c)所示,有的会通过增加输入网络的分辨率来提升网络的性能如图(d)所示。而在本篇论文中会同时增加网络的width、网络的深度以及输入网络的分辨率来提升网络的性能如图(e)所示。

  • 根据以往的经验,增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。
  • 增加网络的width能够获得更高细粒度的特征并且也更容易训练,但对于width很大而深度较浅的网络往往很难学习到更深层次的特征。
  • 增加输入网络的图像分辨率能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量。

网络详细结构 

MBConv结构 

MBConv其实就是MobileNetV3网络中的InvertedResidualBlock,但也有些许区别。一个是采用激活函数不一样(EfficientNet的MBConv中使用的都是Swish激活函数),另一个是在每MBConv中都加入了SE(Squeeze-and-Excitation)模块。

SE模块如下所示,由一个全局平均池化,两个全连接层组成。

Transformer里的 multi-head self-attention

self-attention

 

以上三幅图的便是self-attention的内容, 总结下来就是下面的公式:

 Multi-Head Self-Attention

如上图所示,head=2的情况,将q,k,v分别分解成两个部分,并组合成两个head。 通过上述方法就能得到每个head的Q,K,V的值。

代码练习

使用VGG模型进行猫狗大战

数据处理

datasets 是 torchvision 中的一个包,可以用做加载图像数据。它可以以多线程(multi-thread)的形式从硬盘中读取数据,使用 mini-batch 的形式,在网络训练中向 GPU 输送。在使用CNN处理图像时,需要进行预处理。图片将被整理成 224×224×3 的大小,同时还将进行归一化处理。

创建 VGG Model

torchvision中集成了很多在 ImageNet (120万张训练数据) 上预训练好的通用的CNN模型,可以直接下载使用。直接使用预训练好的 VGG 模型。

修改最后一层,冻结前面层的参数

VGG 模型如下图所示,注意该网络由三种元素组成:

  • 卷积层(CONV)是发现图像中局部的 pattern
  • 全连接层(FC)是在全局上建立特征的关联
  • 池化(Pool)是给图像降维以提高特征的 invariance

目标是使用预训练好的模型,因此,需要把最后的 nn.Linear 层由1000类,替换为2类。为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。

训练并测试全连接层

包括三个步骤:第1步,创建损失函数和优化器;第2步,训练模型;第3步,测试模型。

测试结果正确率为96.5%。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值