2020-8-6 吴恩达DL学习-C4 卷积神经网络-第一周 CNN(1.10 卷积神经网络示例-①常见模式②激活值大小和参数数量)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

A.CNN常见模式一

构建全CNN的构造模块我们已经掌握得差不多了,下面来看个例子。

在这里插入图片描述

如上图。假设有一张大小为32×32×3的输入图片,RGB模式,你想做手写体数字识别。32×32×3的RGB图片中含有某个数字,比如7,你想识别它是从0-9这10个数字中的哪一个,我们构建一个NN来实现这个功能。

我用的这个网络模型和经典网络LeNet-5非常相似,灵感也来源于此。LeNet-5是多年前Yann LeCun创建的,我所采用的模型并不是LeNet-5,但是受它启发,许多参数选择都与LeNet-5相似。

1.Layer1

1-1.卷积层-CONV1

输入是32×32×3的矩阵,假设第一层使用

  • 过滤器大小为5×5,
  • 步幅是1,
  • padding是0,
  • 过滤器个数为6,

那么输出为28×28×6。将这层标记为 CONV1,它用了6个过滤器,增加了偏差,应用了非线性函数,可能是ReLU非线性函数,最后输出CONV1的结果。
在这里插入图片描述

1-2.池化层-POOL1(没有权重和参数,只有一些超参数)

然后构建一个池化层,这里我选择用最大池化,过滤器参数维度 f = 2 f=2 f=2,步幅 s = 2 s=2 s=2,因为padding为0,我就不写出来了。现在开始构建池化层,最大池化使用的过滤器为2×2,步幅为2,表示层的高度和宽度会减少一半。因此,28×28变成了14×14,通道数量保持不变,所以最终输出为14×14×6,将该输出标记为POOL1

2.卷积分类(2种)

人们发现在CNN文献中,卷积有两种分类,这与所谓层的划分存在一致性。

  • 一类卷积是一个卷积层和一个池化层一起作为一层,这就是NN的Layer1。
  • 另一类卷积是把卷积层作为一层,而池化层单独作为一层。

人们在计算NN有多少层时,通常只统计具有权重和参数的层。因为池化层没有权重和参数,只有一些超参数。这里,我们把CONV1和POOL1共同作为一个卷积,并标记为Layer1。
在这里插入图片描述

虽然你在阅读网络文章或研究报告时,你可能会看到卷积层和池化层各为一层的情况,这只是两种不同的标记术语。一般我在统计网络层数时,只计算具有权重的层,也就是把CONV1和POOL1作为Layer1。这里我们用CONV1和POOL1来标记,两者都是神经网络Layer1的一部分,POOL1也被划分在Layer1中,因为它没有权重,得到的输出是14×14×6。

3.Layer2-例1

3-1.卷积层-CONV2

在这里插入图片描述

我们再为它构建一个卷积层,过滤器大小为5×5,步幅为1,这次我们用10个过滤器,最后输出一个10×10×10的矩阵,标记为CONV2。

3-2.池化层-POOL2

在这里插入图片描述

然后做最大池化,超参数过滤器维度 f = 2 f=2 f=2,步幅 s = 2 s=2 s=2
你大概可以猜出结果, f = 2 f=2 f=2,步幅 s = 2 s=2 s=2,高度和宽度会减半,最后输出为5×5×10,标记为POOL2.

这就是NN的第二个卷积层,即Layer2。

4.Layer2-例2

4-1.卷积层-CONV2

在这里插入图片描述

如果对Layer1应用另一个卷积层,

  • 过滤器为5×5,即 f = 5 f=5 f=5
  • 步幅是1,
  • padding为0,
  • 过滤器16个,

所以CONV2输出为10×10×16。这是CONV2层。

4-2.池化层-POOL2

在这里插入图片描述

继续执行做大池化计算,参数过滤器维度 f = 2 f=2 f=2,步幅 s = 2 s=2 s=2。你能猜到结果么?对10×10×16输入执行最大池化计算,参数 f = 2 f=2 f=2,步幅 s = 2 s=2 s=2,高度和宽度减半,计算结果猜到了吧,结果为5×5×16,通道数和之前一样,标记为POOL2。

这是一个卷积,即Layer2,因为它只有一个权重集和一个卷积层CONV2。

在这里插入图片描述

5.全连接层-FC3

5×5×16矩阵包含400个元素,现在将POOL2平整化为一个大小为400的一维向量。我们可以把平整化结果想象成这样的一个神经元集合,然后利用这400个单元构建下一层。

在这里插入图片描述

下一层含有120个单元,这就是我们第一个全连接层,标记为FC3。这400个单元与120个单元紧密相连,这就是全连接层

它很像我们在第一和第二门课中讲过的单神经网络层,这是一个标准的NN。它的权重矩阵为 W [ 3 ] W^{[3]} W[3],维度为120×400。这就是所谓的“全连接”,因为这400个单元与这120个单元的每一项连接,还有一个偏差参数 b [ 3 ] b^{[3]} b[3],维度120x1。最后输出120个维度,因为有120个输出。

6.全连接层-FC4

在这里插入图片描述

然后我们对这个120个单元再添加一个全连接层,这层更小,假设它含有84个单元,标记为FC4。

7.softmax单元

在这里插入图片描述

最后,用这84个单元填充一个softmax单元。如果我们想识别手写0-9这10个数字,这个softmax就会有10个输出。

8.超参数设置常规做法

此例中的CNN很典型,看上去它有很多超参数,关于如何选定这些参数,后面我提供更多建议。常规做法是,尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,那么它也有可能适用于你自己的应用程序,这块下周我会细讲。

现在,我想指出的是,随着NN深度的加深,高度 n H n_H nH和宽度 n W n_W nW通常都会减少。前面我就提到过,从输入32×32到conv1的28×28,到pool1的14×14,到conv2的10×10,再到pool2的5×5。所以随着层数增加,高度和宽度都会减小,而通道数量会增加(过滤器增加),从3到6到16不断增加,然后得到一个全连接层。

B.CNN常见模式二

在NN中,另一种常见模式就是一个或多个卷积后面跟随一个池化层,然后一个或多个卷积层后面再跟一个池化层,然后是几个全连接层,最后是一个softmax。这是NN的另一种常见模式。

C.激活值大小和参数数量

接下来我们讲讲NN的激活值形状,激活值大小和参数数量。
在这里插入图片描述

输入为32×32×3,这3个数做乘法,结果为3072,所以激活值 a [ 0 ] a^{[0]} a[0]有3072维,激活值矩阵为32×32×3,输入层没有参数。计算其他层的时候,试着自己计算出激活值,这些都是网络中不同层的激活值形状和激活值大小。

有几点要注意,

  • 第一,池化层和最大池化层没有参数(0);
  • 第二,卷积层的参数相对较少(208和416);(维度公式参见链接
    • conv1,每个过滤器参数(权重参数)5x5=25,再加上偏置25+1=26,一共8个过滤器,8x26=208
    • conv2,每个过滤器参数(权重参数)5x5=25,再加上偏置25+1=26,一共16个过滤器,16x26=416

前面课上我们提到过,其实许多参数都存在于NN的全连接层。观察可发现,随着NN的加深,激活值尺寸会逐渐变小,如果激活值尺寸下降太快,也会影响NN性能。

示例中,激活值尺寸在第一层为6000,然后减少到1600,慢慢减少到84,最后输出softmax结果。我们发现,许多卷积网络都具有这些属性,模式上也相似。

D.总结

CNN的基本构造模块我们已经讲完了。一个CNN包括卷积层、池化层和全连接层。

许多计算机视觉研究正在探索如何把这些基本模块整合起来,构建高效的NN,整合这些基本模块确实需要深入的理解。根据我的经验,找到整合基本构造模块最好方法就是大量阅读别人的案例。

下周我会演示一些整合基本模块,成功构建高效NN的具体案例。我希望下周的课程可以帮助你找到构建有效NN的感觉,或许你也可以将别人开发的框架应用于自己的应用程序,这是下周的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值