吴恩达深度学习——04卷积神经网络(1)

    这一节主要是对卷积神经网络(CNN)的一个了解和基础知识的学习,本文主要记录了自己在学习时的笔记内容。

    对于计算机视觉应用来说,肯定不希望其处理小图片,要处理的都是比较大的图片,但是因为数据量的巨大让人无法接受,因此需要进行卷积运算。

1、边缘检测

直观上的图形显示示例:

    上面的图片,分别是通过垂直边缘检测和水平边缘检测得到的不同的结果。

(1)垂直边缘检测:

    假设有一个6x6的灰度图像。因为是灰度图像,所以它是一个6x6x1的矩阵,而不是6x6x3,因为没有RGB三个通道。在此可以构造一个3x3的过滤器filter(也可以称之为核),并且用*来表达卷积运算。图片和边缘检测器分别如左和中矩阵所示:

这个卷积过程是filter不断的与其大小相同的部分做对应元素的乘法运算并求和,最终得到的数字相当于新图片的一个像素值,如最右边的矩阵所示,最终得到一个4x4大小的图片。

上面的3x3filter可以做垂直边缘检测的原理:

    下面选用一个比较特别的6*6图像来简单说明。

图像的左部分设置为10,可以理解为白色,而右边部分是0,我们可以理解为黑色,因此在这两种颜色之间的颜色交界处,我们可以理解为一个边缘,通过3x3的过滤器,计算得到了4x4的一个结果,则从结果可以看出,边缘处得到凸显,在中间有段亮一点的区域,对应检查到这个6x6图像中间的垂直边缘。在这里,维数似乎有些不正确,检测到的边缘太粗了,实际上是因为在这个例子中图片太小了。如果是大图片,效果会很好。

(个人理解:对于3x3的垂直边缘检测矩阵来说,如果矩阵所参与检测的像素区像素值相近,即我们可理解为一个图像的颜色连续变化区,而边缘则是图像的一个色彩或者像素值突变区,而当在颜色连续变化的时候,filter与该区域的部分卷积运算所产生的值是左右两列的一个差值,产生的结果不会很大,而当发生边缘部分突变时,左右两列产生差值会相对于原来的平滑的地方变得更大,在颜色表现上就会呈现出区别与变化,因此将边缘呈现出来,也就是边缘检测。

对于一个大图像来说,像素值平滑变化的地方可能是一个图形的内部所在,而像素值分布不连续的地方就是图像边缘,图像边缘是图像的一个重要的特征信息。)

(2)多种边缘检测

垂直边缘检测和水平边缘检测

更加复杂的filter(Sobel、Scharr),Sobel的优点在于增加了中间一行的权重,这会使结果的鲁棒性更加高一些。 

    在我们学习深度学习的过程中,我们不一定要使用那些研究者们所选择的这9个数字,但是可以从中受益匪浅。

2、padding

    padding即在图像外围加一个边框。如果没有设置padding:(1)那么在每次卷积后,得到的图片会缩小,这点很好理解。(2)角落和边缘位置的像素进行卷积运算次数少,可能会丢失游泳信息。

    我们用f来表示filter的size(fxf),用n来表示原始图像的size(nxn),而p来表示padding。

    那么经过卷积后,图片的大小为:

nxn——>(n+2p-f+1)x(n+2p-f+1)

    根据p的不同,我们可以有两种卷积,valid/Same卷积:

    valid:p=0;(nxn——>(n-f+1)x(n-f+1))

    same: p=(f-1)/2;(nxn——>nxn)

    在计算机视觉中,一般padding的值为奇数,[Ng]一个原因是,如果f是一个偶数,那么你只能使用一些不对称填。只有f是奇数的情况下,Same卷积才会有自然的填充,我们可以以同样的数量填充四周,而不是左边填充多一点,右边填充少一点,这样不对称的填充。第二个原因是当你有一个奇数维过滤器,它就有一个中心点。在计算机视觉中,有时候有一个中心点像素会更加方便,便于指出过滤器的位置。

3、卷积步长

    卷积的步长即过滤器矩阵在与图像进行运算时向右向下每次移动的长度。

    如下图的示例:

    

    上图的f=3,p=0,n=7,s(步长)=2,最终我们可以得到的图像为nxn——>(((n+2p-f)/s)+1)x(((n+2p-f)/s)+1),

如果上述计算的商结果的值不为整数,我们可以对其向下取整。

3、立体卷积

    灰色图像中,卷积核和图像都是二维的,仅仅只有一个通道,而对于RGB图像来说,那么会有3个颜色通道,因此在卷积的时候,我们的filter也要相应的改变。卷积核的第三维度要和图像的第三个维度一致。

    上图示例相当于是用filter的27个参数单元来产生一个结果单元,因此有6x6x3 * 3x3x3——>4x4。

    多核卷积:

    

    通过不同的filter来产生几个不同特征提取的结果,如图中,上面的4x4则是垂直边缘特征提取结果,下面的4x4则是水平边缘特征的提取。将结果合成一个4x4x2的结果表达。

4、简单卷积网络

    

    

    w[1]向量是filter中每一个参数一维化组成,a[0]则为图像输入,w[1],a[0]计算得到的结果再加上一个偏差b[1]后,使用激活函数进行a[1]。在这里有一个参数数量的计算,如果按照上例,那么参数一共是(3*3*3+1)*2=20个,1是指有一个b,而2是指由两个卷积核。

    不论图片输入有多大,1000x1000也好,5000x5000也好,参数始终都是20个,用这两个过滤器来提取特征,即使图片很大,但是参数却很少,这就是卷积神经网络的一个特征,叫做“避免过拟合”。

    标记的总结:

    

    卷积网络层有三种类型:分别为卷积层(Convolution),Conv;池化层(Pooling),Pool;全连接层(Fully connected)FC

    5、池化层

    除了卷积层,池化层也经常用来缩减模型的大小,提高计算速度,同时提高所取特征的鲁棒性。分为最大池化(Max-Pooling)和平均池化(Average pooling)。目前来说,最大池化比平均池化常用。

     (1) 最大池化(f=2,s=2)

    

    (2)平均池化(f=2,s=2)

    

    总结:池化层的是超参数,没有需要网络学习的参数的。

6、卷积网络示例

    以LeNet-5作为示例

    以下是具体的参数变化(在这里因为Ng使用的模型与LeNet-5有些微的差别,因此参数也有些微的不一样):

    (上面的有个地方有点不太明白,即conv1参数个数208的求解,按照自己的思路是,(5*5*3+1)*8=608,而实际上是208=(5*5+1)*8,这个计算由自己推算出来,难道RGB的三个通道中的参数只算上了一个通道的??在这里留个坑。看到后面,发现Ng有说是通过二维的过滤器对每一个通道进行遍历,因此,虽然在数学上将过滤器设置为(f*f*nc),但实际上我们将过滤器定为f*f大小)

    总结:在卷积层仅有少量的参数,在池化层没有参数,在全连接层,即普通的神经网络层,存在大量的参数。

7、为什么使用卷积?

    参数减少:与普通的全连接神经网络相比,卷积神经网络的参数更少。

    参数共享:一个特征检测器(filter)对图片的一部分有用的同时也有可能对图片的另一部分有用。

    连接的稀疏性:在每一层中,每个输出值只取决于少量的输入。

   

这一周学习卷积,确实比上一周学习逻辑回归以及简单的神经网络更加需要理解一点,而且可能其中还有很多不透彻的地方,就需要在今后的学习中慢慢的去吃透。

因为可能到时候服务器上需要用到ubantu,所以又在自己的电脑上弄了几天的ubantu的虚拟机,所以学习进度有点慢了。还是有很多东西需要学习的。

一些内容参考了:https://zhuanlan.zhihu.com/p/30800318

   

 

 

    

    

    

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值