【深度学习】4.2深度卷积网络:实例探究

经典网络

1.LeNet-5
LeNet-5可以识别图片中的手写数字
在这里插入图片描述
卷积层→池化层→卷积层→池化层→全连接层→全连接层→输出,这种结构很常用。这里使用的是平均池化。

过去,人们经常使用sigmoid函数和tanh函数,而不是ReLu函数。

2.AlexNet
在这里插入图片描述
用一张227×227×3的图片作为输入,第一层使用96个11×11的过滤器,步幅为4,因此尺寸缩小到55×55。
然后用一个3×3的过滤器构建最大池化层,f=3,s=2,卷积层尺寸缩小为27×27×96。
再执行一个5×5的卷积,相同的padding,输出结果是27×27×256。
再次进行最大池化,尺寸缩小到13×13。
然后执行一次与上一次相同的卷积,相同的padding,得到的结果是13×13×384.
再做一次3×3的相同卷积,得到的结果是13×13×384.
再做一次3×3的相同卷积,得到的结果是13×13×256.
最后进行一次最大池化,尺寸缩小到6×6×256.
将其展开为9216个单元。
然后是一些全连接层。
最后使用softmax函数输出识别的结果,看看它究竟是1000个可能的对象中的哪一个。

LeNet-5大约有6万个参数,而AlexNet包含约6000万个参数,比LeNet-5大得多。当用于训练图像和数据集时,AlexNet能处理非常相似的基本构造模块,这些模块往往包含大量的隐藏单元或数据;此外,AlexNet使用了ReLU激活函数。

3.VGG-16
VGG-16网络没有那么多超参数,这是一种
只需要专注于构建卷积层的简单网络。
CONV=3×3filter,s=1,same
MAX-POOL=2×2,s=2
首先用3×3,步幅为1的过滤器构建卷积层,padding参数为same;然后用一个2×2,步幅为2的过滤器构建最大池化层。
在这里插入图片描述
VGG网络简化了神经网络结构,但它需要训练的特征数量非常巨大。

残差网络(ResNet)

在这里插入图片描述
这是一个两层神经网络,在l层进行激活得到a[l+1],然后再次激活得到a[l+2]。计算过程为:从a[l]开始线性激活,通过
在这里插入图片描述
算出z[l+1],然后通过ReLU非线性激活得到a[l+1]
在这里插入图片描述
接着再次进行线性激活,得到a[l+2]

信息流从a[l]到a[l+2]需要经过上面这些步骤,即这组网络层的主路径。
而在残差网络中,可以将a[l]直接向后拷贝到神经网络的深层,在得到a[l+2]前面的ReLU非线性激活前加上a[l],即
在这里插入图片描述
这就产生了一个残差块。
在这里插入图片描述
在a[l]处产生了一个“捷径”,也可以叫“跳远连接”,即a[l]跳过一层或者好几层,从而将信息传递到神经网络的更深层。

使用残差块可以训练更深的神经网络,因此构建一个ResNet网络就是通过很多这样的残差块堆积在一起,形成一个深度神经网络。

以下为一个普通网络:
在这里插入图片描述
将它变成ResNet的方法是加上所有的跳远连接,例如每两层增加一个捷径:
在这里插入图片描述
图中这5个残差块连接在一起构成一个残差网络。
如果使用一个普通网络,随着网路深度的加深,训练错误会先减少,然后增多;而理论上,随着网络深度的加深,应该训练得越来越好才对。但有了ResNet,即使网络再深,训练的表现都很不错,比如错误率会减少。
对x的激活,或者中间的激活,能够达到网络的更深层的方法可以有助于解决梯度消失和梯度爆炸的问题,让我们训练更深网络的同时,又能保证良好的性能。

残差网络为什么有用

假设有一个大型神经网络,输入为X,输出激活值a[l],且在整个网络中使用ReLU激活函数。如果想增加这个神经网络的深度,比如在后面再添加两层,最后输出为a[l+2],可以把添加的两层看作一个ResNet块,即具有近路连接的残差块。那么a[l+2] = g(z[l+2] + a[l]) = g(w[l+2]a[l+1] + b[l+2] + a[l]) ,其中,添加项a[l]是添加的跳远连接的输入。
若w[l+2] = 0,b = 0,那么a[l+2] =g(a[l]) = a[l],因为使用ReLU激活函数,a[l]为非负,因此g(a[l])的值就为a[l]

网络中的网络以及1×1卷积

过滤器是1×1×1,本例中是数字2;输入一张6×6×1的图片,对它做卷积。相当于把图片中的数字都乘以2。
在这里插入图片描述
对通道为1的图片来说,1×1卷积似乎并没什么特别大的作用。

但如果是一张6×6×32的图片,那么1×1卷积可以遍历这36个单元格,计算左图中32个数字和过滤器中的32个数字的元素智能乘积,然后应用ReLU非线性函数,以其中一个单元格为例:
它是这个输入层上的某个切片,用这36个数字乘以输入层上1×1的切片
在这里插入图片描述
此时1×1卷积可以理解为这32个单元都应有了一个全连接神经网络,全连接层的作用是输入32个数字和过滤器数量。

还有一个例子:
在这里插入图片描述
可以用这种方法来压缩通道数量nc并进行计算,因为池化层只是压缩了这些层的高度nH和宽度nW

谷歌Inception网络简介

对于一个28×28×192维度的输入层:
在这里插入图片描述
Inception网络或Inception层的作用就是代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层。
如果使用1×1卷积,输出结果将是28×28×某个值,假设为28×28×64,并且只有一个层;如果用3×3的过滤器,那么输出是28×28×128;为了匹配维度,使用相同卷积。然后把第二个值堆积到第一个值上。再使用5×5的过滤器,输出变成28×28×32,再次使用相同卷积,保持维度不变。再使用池化方法,得到的输出结果28×28×32,也将它堆积起来;为了匹配所有维度,需要对最大池化使用padding。
在这里插入图片描述
这样就可以输入某个量,通过这个Inception网络,因为它累加了所有结果,所以这里的最终输出为32+32+128+64=256.所以,Inception模块的输入为28×28×129,输出为28×28×256。

Inception网络不需要人为决定使用哪个过滤器,或是否需要池化,而是由网络自行确定这些参数。可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。

Inception网络

为了减少计算量,可以进行如下操作:
在这里插入图片描述
在这里插入图片描述

使用开源的实现方案

在这里插入图片描述
/>>> get clone (+URL)

下载完毕之后

cd deep-residual-networks

然后进入prototxt
在这里插入图片描述
然后在这里插入图片描述
如果你在开发一个计算机视觉应用,常见的工作流程为:
先选择一个喜欢的架构;接着寻找一个开源实现,从GitHub下载下来,以此为基础开始构建。

数据扩充

1.简单的数据增强方法
最简单的数据增强方法就是垂直镜像对称
在这里插入图片描述
如果镜像操作保留了图像中想识别的物体,这是一个很实用的数据增强技巧。

另一个经常使用的技巧是随机裁剪
在这里插入图片描述
给定一个数据集,然后开始随机修剪,可以得到不同的图片放在数据集中。

还可以使用旋转,剪切图像,扭曲变换。

2.色彩转换
在这里插入图片描述
给R、G、B三通道加上不同的失真值。

对R、G、B不同的采样方式有PCA,它是一种影响颜色扭曲的算法,即主成分分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值