声明

本文参考吴恩达深度学习视频,b站可以搜到。

前言

本文的结构是:

  • 卷积神经网络
  • 边缘检测(垂直边缘检测、水平边缘检测)
  • padding
  • 卷积层conv
  • 池化层pool
  • 全连接层fullyconnected

一、卷积神经网络

1.1、feature

参数共享、稀疏连接;
善于捕捉平移不变。

二、边缘检测(垂直边缘检测、水平边缘检测)

2.1、why

对二维的图形进行垂直边缘检测,输入6x6的图片,*3x3的过滤器矩阵,得到4x4的矩阵输出(各个元素相乘,然后加起来)。
如图所示,原图片,左边白,右边黑,就有一个特别明显的垂直边缘在图像中间,*一个过滤器矩阵后,得到图像,两边黑,中间亮,就表明在图像中间有一个特别明显的垂直边缘。
深度学习第四周--第一课卷积神经网络
同理可得,水平边缘检测,*的过滤器矩阵是上面的过滤器矩阵的转置
深度学习第四周--第一课卷积神经网络
总之,使用不同的过滤器,就可以找到垂直或者水平的边缘。
soble过滤器:
深度学习第四周--第一课卷积神经网络
scharr过滤器:
深度学习第四周--第一课卷积神经网络

2.2、维度

输入nxn的图像,用fxf的过滤器做卷积,那么输出的维度就是(n-f+1)x(n-f+1)。

2.3、三维图片的卷积

输入6x6x3的图片,3代表RGB三个颜色的通道,再与一个3x3x3的过滤器做卷积。下图中,图像与第一个垂直边缘过滤器进行卷积得到一个紫色输出,又与第二个水平边缘过滤器进行卷积得到一个蓝色输出,将这两个输出堆叠在一起,得到4x4x2的输出立方体。
深度学习第四周--第一课卷积神经网络

若只想对红色通道进行卷积,则过滤器的第一层为
深度学习第四周--第一课卷积神经网络
第二层第三层均为0。若三个通道都要卷积,则过滤器为:
深度学习第四周--第一课卷积神经网络

2.3.1、维度

有一个nnncn * n * n_c的输入图像,ncn_c就是通道数目,然后卷积一个ffncf*f*n_c的过滤器,得到了(n-f+1)x(n-f+1)x ncn_c的输出。其中,步幅s=1,并且没有padding。

三、卷积填充padding和卷积步长

3.1、why使用padding

在进行边缘检测的时候,原图像*过滤器矩阵,得到的图像会缩小,如果多进行几次边缘检测,得到的图片就越来越小,在这个过程中图片的信息也会不断损失,为了保证输出图像和原图像大小一致,我们就要对原始图片的边缘再填充一层像素。
维度:输入nxn的图像,用fxf过滤器做卷积,p是填充的数量,输出也变成了(n+2p-f+1)x(n+2p-f+1)。
填充的方法
valid卷积:p=0,意味着不填充,会得到(n-f+1)x(n-f+1)的输出
same卷积:意味着要填充,输出大小和输入大小一致,会得到(n+2p-f+1)x(n+2p-f+1)的输出。若让n+2pf+1=nn+2p-f+1=n,则
p=(f1)2p=\frac{(f-1)}{2},当f是一个奇数时,只要选择相应的填充尺寸,就能确保得到和输入相同尺寸的输出。

3.2、卷积步长

之前的图像*过滤器矩阵,每次都移动一个步长。如果输入nxn的图像,用fxf的过滤器做卷积,填充p,步幅s,得到
(n+2pfs+1)X(n+2pfs+1)(\frac{n+2p-f}{s}+1)X(\frac{n+2p-f}{s}+1)向下取整的矩阵。

四、单层卷积网络

4.1、卷积层conv

如下图所示,在三维图片的卷积中,一个具有RGB通道的图片,与三维的垂直和水平过滤器相卷积,得到两个4x4的矩阵,然后利用python的广播机制给一个矩阵再加同一个偏差,另一个矩阵加上另一个偏差,这个偏差是实数。然后应用非线性函数relu,输出结果是两个4x4的矩阵。在把这两个矩阵堆叠起来,最终得到一个4x4x2的矩阵。
深度学习第四周--第一课卷积神经网络
在前向传播中,Z[1]=W[1]a[0]+n[1],a[0]=xZ^{[1]}=W^{[1]}a^{[0]}+n^{[1]},a^{[0]}=x,执行非线性函数得到a[1]a^{[1]},即a[1]=g(Z[1])a^{[1]}=g(Z^{[1]})
在卷积过程中,我们对两个过滤器这272个数进行操作,我们取这些数做乘法,实际执行了一个线性函数,得到一个4x4的矩阵,它的作用类似与W[1]a[0]W^{[1]}a^{[0]}。再加上实数偏差,得到一个4x4的矩阵,它的作用类似Z[1]Z^{[1]},最后应用非线性函数,得到一个4x4x2矩阵,成为神经网络的下一层,也就是**层。
a[0]a^{[0]}a[1]a^{[1]}的演变过程,首先执行线性函数,然后所有元素相乘做卷积,具体做法是运用线性函数再加上偏差,然后应用**函数relu。这样就通过神经网络的一层把一个6x6x3的维度a[0]a^{[0]}演化为一个4x4x2维度的a[1]a^{[1]},这就是卷积神经网络的一层。
注意:无论图片有多大,参数始终是27
2个。用2个过滤器提取特征,如垂直边缘、水平边缘,即使这些图片很大,参数却很少,这就是卷积神经网络的一个特征,叫作“避免过拟合”。

4.1.1、总结

f[l]f^{[l]}ll层中过滤器大小为fxf
p[l]p^{[l]}ll层中padding的数量
s[l]s^{[l]}ll层中步幅大小
nc[l]n_c^{[l]}:过滤器的个数
nH[l1]XnW[l1]Xnc[l1]n_H^{[l-1]} X n_W^{[l-1]} X n_c^{[l-1]}:上一层的**值。ll层中的输入图像大小。
nH[l]XnW[l]Xnc[l]n_H^{[l]} X n_W^{[l]} X n_c^{[l]}ll层中输出图像大小。
图像的高度:
nH[l]=nH[l1]+2p[l]f[l]s[l]+1n_H^{[l]}=\frac{n_H^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1向下取整。
图像的宽度:
nW[l]=nW[l1]+2p[l]f[l]s[l]+1n_W^{[l]}=\frac{n_W^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1向下取整。
每个过滤器大小:f[l]f[l]nc[l]f^{[l]} * f^{[l]} * n_c^{[l]}
**函数:a[l]=nH[l]nW[l]nc[l]a^{[l]}=n_H^{[l]} * n_W^{[l]} * n_c^{[l]}
若有m个样本,则有m个**值的集合:a[l]=mnH[l]nW[l]nc[l]a^{[l]}=m * n_H^{[l]} * n_W^{[l]} * n_c^{[l]}
权重W:f[l]f[l]nc[l1]nc[l]f^{[l]} * f^{[l]} * n_c^{[l-1]}*n_c^{[l]},也就是所有过滤器的集合再乘以过滤器的总数量。
偏差参数b:111nc[l]1*1*1*n_c^{[l]}
深度学习第四周--第一课卷积神经网络

4.2、池化层pool

4.2.1、意义

使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。

最大池化层

选取每个过滤器矩阵的最大值。
最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是如果在过滤器中提取到某个特征,那么保留最大值,如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小。

深度学习第四周--第一课卷积神经网络

平均池化层

选取的不是每个过滤器的最大值,而是平均值。
深度学习第四周--第一课卷积神经网络

4.3、全连接层fullyconnected

假设池化层得到一个5x5x16的矩阵,将其平整化为一个大小为400的一维向量,可以将这个平整化结果想象成这样的一个神经元集合,这就是我们的第一个全连接层,

相关文章: