吴恩达deeplearning之CNN—卷积神经网络入门

链接:https://blog.csdn.net/ice_actor/article/details/78648780

1.边界检测示例
假如你有一张如下的图像,你想让计算机搞清楚图像上有什么物体,你可以做的事情是检测图像的垂直边缘和水平边缘。

如下是一个66的灰度图像,构造一个33的矩阵,在卷积神经网络中通常称之为filter,对这个66的图像进行卷积运算,以左上角的-5计算为例
3
1+00+1-1+11+50+8*-1+21+70+2*-1 = -5
其它的以此类推,让过滤器在图像上逐步滑动,对整个图像进行卷积计算得到一幅4*4的图像。

为什么这种卷积计算可以得到图像的边缘,下图0表示图像暗色区域,10为图像比较亮的区域,同样用一个3*3过滤器,对图像进行卷积,得到的图像中间亮,两边暗,亮色区域就对应图像边缘。

通过以下的水平过滤器和垂直过滤器,可以实现图像水平和垂直边缘检测。

以下列出了一些常用的过滤器,对于不同的过滤器也有着不同的争论,在卷积神经网络中把这些过滤器当成我们要学习的参数,卷积神经网络训练的目标就是去理解过滤器的参数。

  1. padding
    在上部分中,通过一个33的过滤器来对66的图像进行卷积,得到了一幅44的图像,假设输出图像大小为nn与过滤器大小为ff,输出图像大小则为(n−f+1)∗(n−f+1)(n−f+1)∗(n−f+1)。
    这样做卷积运算的缺点是,卷积图像的大小会不断缩小,另外图像的左上角的元素只被一个输出所使用,所以在图像边缘的像素在输出中采用较少,也就意味着你丢掉了很多图像边缘的信息,为了解决这两个问题,就引入了padding操作,也就是在图像卷积操作之前,沿着图像边缘用0进行图像填充。对于3
    3的过滤器,我们填充宽度为1时,就可以保证输出图像和输入图像一样大。

padding的两种模式:
Valid:no padding
输入图像nn,过滤器ff,输出图像大小为:(n−f+1)∗(n−f+1)(n−f+1)∗(n−f+1)
Same:输出图像和输入图像一样大

3.卷积步长
卷积步长是指过滤器在图像上滑动的距离,前两部分步长都默认为1,如果卷积步长为2,卷积运算过程为:

加入stride后卷积图像大小的通用计算公式为:
输入图像:nn,过滤器:ff步长:s,padding:p
输出图像大小为:⌊(n+2p−fs+1))⌋∗⌊(n+2p−fs+1)⌋⌊(n+2p−fs+1))⌋∗⌊(n+2p−fs+1)⌋,⌊⌋⌊⌋表示向下取整

以输入图像77,过滤器33,步长为2,padding模式为valid为例输出图像大小为:⌊(7+2∗0−32+1)⌋∗⌊7+2∗0−32+1)⌋=3∗3⌊(7+2∗0−32+1)⌋∗⌊7+2∗0−32+1)⌋=3∗3
4.彩色图像的卷积
以上讲述的卷积都是灰度图像的,如果想要在RGB图像上进行卷积,过滤器的大小不在是33而是有333,最后的3对应为通道数(channels),卷积生成图像中每个像素值为333过滤器对应位置和图像对应位置相乘累加,过滤器依次在RGB图像上滑动,最终生成图像大小为44。

另外一个问题是,如果我们在不仅仅在图像总检测一种类型的特征,而是要同时检测垂直边缘、水平边缘、45度边缘等等,也就是多个过滤器的问题。如果有两个过滤器,最终生成图像为442的立方体,这里的2来源于我们采用了两个过滤器。如果有10个过滤器那么输出图像就是4410的立方体。

5.单层卷积网络
通过上一节的讲述,图像通过两个过滤器得到了两个44的矩阵,在两个矩阵上分别加入偏差b1b1和b2b2,然后对加入偏差的矩阵做非线性的Relu变换,得到一个新的44矩阵,这就是单层卷积网络的完整计算过程。用公式表示:
z[1]=w[1]a[0]+b[1]
z[1]=w[1]a[0]+b[1]
a[1]=g(z[1])
a[1]=g(z[1])

其中输入图像为a[0]a[0],过滤器用w[1]w[1]表示,对图像进行线性变化并加入偏差得到矩阵z[1]z[1],a[1]a[1]是应用Relu激活后的结果。

如果有10个过滤器参数个数有多少个呢?
每个过滤器都有333+1=28个参数,333为过滤器大小,1是偏差系数,10个过滤器参数个数就是28*10=280个。不论输入图像大小参数个数是不会发生改变的。
描述卷积神经网络的一些符号标识:
ll为一个卷积层:
f[l]f[l]:第ll层过滤器的大小
p[l]p[l]:第ll层padding的数量
s[l]s[l]:第ll层步长大小
nlCnCl:过滤器的个数
Input:
nl−1H×nl−1W×nl−1CnHl−1×nWl−1×nCl−1:l−1l−1层输入图像的高、宽以及通道数。
Output:
nlH×nlW×nlCnHl×nWl×nCl:输出图像的高、宽以及通道数
输出图像的大小:
nlH=⌊nl−1H+2∗pl−f[l]sl+1⌋nHl=⌊nHl−1+2∗pl−f[l]sl+1⌋
nlW=⌊nl−1W+2∗pl−f[l]sl+1⌋nWl=⌊nWl−1+2∗pl−f[l]sl+1⌋
输出图像的通道数就是过滤器的个数

6.简单卷积网络示例
输入图像:39393,符号表示:n[0]H=n[0]W=39nH[0]=nW[0]=39 ;n[0]c=3;nc[0]=3
第1层超参数:f[l]=3f[l]=3(过滤器大小);s[l]=1s[l]=1(步长);p[l]=0p[l]=0(padding大小);n[l]C=10nC[l]=10(过滤器个数)
第1层输出图像:373710,符号表示:n[1]H=n[1]W=37nH[1]=nW[1]=37 ;n[1]c=10;nc[1]=10
第2层超参数:f[2]=5f[2]=5;s[2]=2s[2]=2;p[2]=0p[2]=0;n[2]C=20nC[2]=20
第2层输出图像:171720,符号表示:n[2]H=n[2]W=17nH[2]=nW[2]=17 ;n[2]c=20;nc[2]=20
第3层超参数:f[3]=5f[3]=5;s[3]=2s[3]=2;p[2]=0p[2]=0;n[3]C=40nC[3]=40
第3层输出图像:7740,符号表示:n[3]H=n[3]W=17nH[3]=nW[3]=17 ;n[3]c=40;nc[3]=40
将第三层的输出展开成1960个元素
然后将其输出到logistic或softmax来决定是判断图片中有没有猫,还是想识别图像中K中不同的对象

卷积神经网络层的类型:
卷积层(convolution,conv)
池化层(pooling,pool)
全连接层(Fully connected,FC)
7.池化层
最大池化(Max pooling)
最大池化思想很简单,以下图为例,把44的图像分割成4个不同的区域,然后输出每个区域的最大值,这就是最大池化所做的事情。其实这里我们选择了22的过滤器,步长为2。在一幅真正的图像中提取最大值可能意味着提取了某些特定特征,比如垂直边缘、一只眼睛等等。

以下是一个过滤器大小为3*3,步长为1的池化过程,具体计算和上面相同,最大池化中输出图像的大小计算方式和卷积网络中计算方法一致,如果有多个通道需要做池化操作,那么就分通道计算池化操作。

平均池化和最大池化唯一的不同是,它计算的是区域内的平均值而最大池化计算的是最大值。在日常应用使用最多的还是最大池化。

池化的超参数:步长、过滤器大小、池化类型最大池化or平均池化

8.卷积神经网络示例
以下是一个完整的卷积神经网络,用于手写字识别,这并不是一个LeNet-5网络,但是设计令该来自于LeNet-5。

网络各层参数个数表:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值