卷积神经网络第二周 卷积神经网络:实例探究

编程入门 行业动态 更新时间:2024-10-15 08:22:11

<a href=https://www.elefans.com/category/jswz/34/1765938.html style=卷积神经网络第二周 卷积神经网络:实例探究"/>

卷积神经网络第二周 卷积神经网络:实例探究

2.1 为什么要进行实例探究
本周CNN实例提纲:

ResNet残差网络(训练了一个深达152层的神经网络)和Inception神经网络很有趣,很多思路都是多学科融合的产物,就算不主攻CV,也可以发现一些有趣的思路。

2.2 经典网络

LeNet-5是第一个成功应用于数字识别问题的卷积神经网络,总共包含了大约6万个参数。
顺序一般是CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer,即y hat。
当时LeNet-5模型池化层使用的是average pool,而且各层激活函数一般是Sigmoid和tanh。现在,我们可以根据需要,做出改进,使用max pool和激活函数ReLU。


AlexNet模型更复杂一些,总共包含了大约6千万个参数。同样可以根据实际情况使用激活函数ReLU。原作者还提到了一种优化技巧,叫做Local Response Normalization(LRN)。 而在实际应用中,LRN的效果并不突出。


VGG-16的参数多达1亿3千万,模型很规整:滤波器个数成比例增加到512,总是一些卷积后池化,可以清楚看见nH、nW减少nc增多等。

2.3 残差网络ResNets
如果神经网络层数越多,网络越深,源于梯度消失和梯度爆炸的影响,整个模型越难以训练成功。解决的方法之一是人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为Residual Networks(ResNets)。
Residual networks由许多隔层相连的神经元子模块组成(residual block):

a[l]直接隔层与下一层的线性输出相连,与z[l+2]共同通过激活函数ReLU输出a[l+2]。

由多个Residual block组成的神经网络就是Residual Network。实验表明,这种模型结构对于训练非常深的神经网络,效果很好。
为了便于区分,我们把非Residual Networks称为Plain Network。
与plain network相比,残差网络能训练更深的神经网络,有效避免发生梯度消失和梯度爆炸,在增加层数的过程中可以做到训练误差一直在减小。

2.4 残差网络为什么有用?




ResNets同类型层之间,例如CONV layers,大多使用same类型,保持维度相同。如果是不同类型层之间的连接,例如CONV layer与POOL layer之间,如果维度不同,则引入矩阵Ws。

2.5 网络中的网络/1*1卷积
1* 1 Convolutions也叫networks in networks,即滤波器的维度为 1 * 1。对于单个filter,1 * 1的维度就意味着卷积操作等同于乘积操作。

那么,对于多个filters,1×1 Convolutions的作用实际上类似全连接层的神经网络结构。效果等同于Plain Network中a[l]到a[l+1] 的过程。这点还是比较好理解的。
假设通道数为32,滤波器的通道数和原始图片的通道数符合,得到6*6的输出图片,实现了原始图片的数字和滤波器的数字相乘这个很棒的运算。
如果有很多这样的滤波器,最终得到的维度为6 * 6 * 滤波器的数量。

一个1 * 1卷积的应用:原始图片维度为28 28 192,每个滤波器的维度为1 * 1 * 192(通道数与原始图片通道数相等),有32个滤波器,输出层为28 * 28 * 32。这就是压缩nc的方法。
也可以保持输出维度不变,仍为28 28 192,但是做非线性运算,更复杂的函数。

2.6 Inception网络简介

之前我们介绍的CNN单层的滤波算子filter尺寸是固定的,1×1或者3×3等。而Inception Network在单层网络上可以使用多个不同尺寸的filters,进行same convolutions,把各filter下得到的输出拼接起来。除此之外,还可以将CONV layer与POOL layer混合,同时实现各种效果。但是要注意使用same pool。
与其它只选择单一尺寸和功能的filter不同,Inception Network使用不同尺寸的filters并将CONV和POOL混合起来,将所有功能输出组合拼接,再由神经网络本身去学习参数并选择最好的模块。
Inception Network在提升性能的同时,会带来计算量大的问题:

一共做的乘法的次数:120m次(m表示百万)。
同样是输入尺寸为28 28 192,输出尺寸的28 28 32,但计算量大约是原来的十分之一的方法:用1 * 1卷积运算,先压缩成较小的中间层,也叫瓶颈层bottleneck layer,然后再扩大它。

2.7 Inception网络


Inception network除了由许多inception modules组成外,网络中间隐藏层也可以作为输出层softmax,有利于防止发生过拟合。

inception的名字来源是电影“inception盗梦空间”,里面一个台词是希望we need to go deeper, 意味着需要创建更深的神经网络。

2.8 使用开源的实现方案
先选择一个架构,接着寻找开源实现,从GitHub上下载下来,以此为基础开始构建,别人已经训练好的,你就可以进行迁移学习。

2.9 迁移学习transfer learning
如果你下载别人用很强的GPU很多的时间已经训练好的网络结构的权重,用这个作为预训练,把他当做一个很好的初始化用在自己的神经网络上,用迁移学习把公共的数据集的知识迁移到自己的问题上,会进展比较快。

例如你要识别图片里面有没有你的猫:有tigger、有misty、都没有(neither)这三种情况,忽略两只猫出现在同一张照片的情况。
做法是从网上下载一些神经网络开源的实现,把代码和权重都下载下来,如 区分了1000类,你要做的是去掉最后的sotfmax层,创建你自己的sotfmax单元。
把前面所有的层都看做是冻结的,冻结所有层的参数,只需要训练和你的softmax层有关的参数。
为了不训练冻结权重,可以设置trainable parameter=0或freeze=1,不同的framework有不同的方式。
用紫色部分固定的函数,取任意输入图像x, 计算他的某个特征向量(你训练集中所有样本的紫色实心那层的激活值),存储在硬盘里,然后在此之上训练softmax分类器做预测。
即使你的训练集很小,也可以通过这种方法得到不错的结果。

训练集更大时,做法是冻结更少的层,然后训练后面的层。可以取前面层的权重,用作初始化,然后从训练部分开始梯度下降;或者直接去掉后面几层,换成自己的隐藏单元。
总之,训练集越大,需要冻结的层数越少,你能训练的层越多。

如果有大量的数据,做法是把整体的权重当做初始化,然后训练整个网络,当然最后需要自己的sotfmax输出层输出三种结果。

深度学习中迁移学习非常非常常用。

2.10 数据扩充data augmentation
对计算机视觉来说,数据量不够常常是个问题,数据扩充(数据增强)是可行的。

最简单的数据增强的方法是垂直镜像对称。另一个常用方法是随机剪裁。也可以用旋转、剪切图像、扭曲变换,这些方法太复杂了在实践中不常用。

第二种经常使用的方法是色彩转换。给R,G,B三通道加上不同的失真值,实践中对他们的变化是基于某些分布的。这样做的原因是模拟不同的阳光和灯光,可以使你的算法对照片的颜色更改更具鲁棒性。
还可以更有针对性地对图片的RGB通道进行PCA color augmentation,也就是对图片颜色进行主成分分析,对主要的通道颜色进行增加或减少,可以采用高斯扰动做法。这样也能增加有效的样本数量。具体的PCA color augmentation做法可以查阅AlexNet的相关论文。
在构建大型神经网络的时候,数据增强和训练可以由两个不同的线程来进行。

2.11 计算机视觉现状

更多推荐

卷积神经网络第二周 卷积神经网络:实例探究

本文发布于:2024-02-14 15:52:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764045.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:卷积   神经网络   实例

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!