吴恩达深度学习 course4 卷积神经网络

发布日期:2019-07-15

1.computer vision

cv是深度学习的一个重要方向cv一般而言包括:图像识别目标检测神经风格转换

传统的神经网络所存在的问题:图片的输入维度比较大具体如下图所示这就造成了权重w的维度比较大那么他所占用的内存也会比较大计算w的计算量也会很大

所以我们会引入卷积神经网络

2.Edge detection example

神经网络由浅层到深层可以检测图片的边缘特征局部特征整体特征

 

边缘特征以垂直边缘检测为例.如下图所示将一个6X6的灰度图片卷积一个filter得到一个新的图片即是对该图进行了垂直边缘检测其中∗ 表示卷积操作。python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。

3.More edge detection

图片边缘检测有两种渐变方式一种由明边暗一种由暗变明具体如下所示

实际应用中对输出图片取绝对值则渐变方式不同也不会影响什么

水平边缘检测例子:

除了上图的filter其他常见的filter还有Sobel filter和Scharr filter如下:

实际应用中我们会检测边缘的更多特征而不只是垂直特征与水平特征filter的参数是通过训练得到的类似于标准神经网络中的权重W一样由梯度下降算法反复迭代求得确定边缘特征后CNN就可以对所有的边缘特征进行一个检测

4.Padding

按照之前所讲的如果一张nxn的图片filter为fxf那么卷积后所得到的图片大小为 n-f+1卷积后会出现两个问题:

图片变得更小图片自身的边缘信息丢失

解决这两个问题我们可以对图像就行一个填充如下: 填充的部分像素都为0

假设填充了p个宽度那么填充之后进行卷积所得到的图片为  (n+2p-f)+1 X (n+2p-f)+1

 

valid convolutions:不对图片进行填充

same convolutions:即是 令(n+2p-f)+1=n  ==> p=(f-1)/2使得填充后进行卷积所得到的图片与原图片的大小相同f通常为奇数(odd)原因也许可能是:

使得p为整数填充为对称的填充

为奇数的时候filter有一个中心位置   

 

5.Strided convolutions

步长即是只每一次卷积的时候步进的长度:如下

步长为s时卷积后所得到的图片大小为 (n+2p-f)/s +1  X (n+2p-f)/s +1如果结果不为整数则向下取整会把卷积时超出图片的部分给舍去如上图中的画X部分

我们所说的卷积实际上计算的是一个相关系数与数学意义上的卷积并不相同数学意义上的卷积会对filter进行一个旋转而我们的操作过程并不会这样在深度学习中对filter旋转这并不重要

6.Convolutions over volumes

对于有RGB三个颜色通道的图片来说对其进行一个卷积时filter中的最后一个参数 应该与颜色通道的个数保持一致

3通道图片的卷积运算与单通道图片的卷积运算基本一致。过程是将每个单通道(R,G,B)与对应的filter进行卷积运算求和,然后再将3通道的和相加,得到输出图片的一个像素值。

不同通道的滤波算子可以不相同。例如R通道filter实现垂直边缘检测,G和B通道不进行边缘检测,全部置零,或者将R,G,B三通道filter全部设置为水平边缘检测。

 

上图指的是是只有一个filter的情况为了进行多个卷积运算,实现更多边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。这样,不同滤波器组卷积得到不同的输出,个数由滤波器组决定。则结果应该如下所示

假设图片的颜色通道为ncn x n x nc 与f x f x nc所得到的图片为(n -f +1) x (n -f +1) x n"c  n"c为过滤器个数

 7.One layer of a convolutional network

卷积神经网络的单层结构如下:

上图中的参数一共有 (3x3x3+1)x2个参数的数目与图片的大小无关只与filter有关

总结一下CNN单层结构的所有标记符号,设层数为

[l]   = filter size

[l]  = padding

[l]   = stride

[lc = number of filters

 

 8.A Simple Convolution network example

一个简单的CNN例子如下:

前几层都是在进行卷积操作n[H]与n[W]逐渐减下而n[c]逐渐增加最后一层将图片化为一个向量(7x7x401)的向量与最后一层的输出层相连接

CNN有三种类型的layers:

9.Pooling layers

池化层是用来减小尺寸提高运算速度减少噪音使模型更加健壮的

 

Pooling layers的做法比convolution layers简单许多,没有卷积运算,仅仅是在滤波器算子滑动区域内取最大值,即max pooling,这是最常用的做法。注意,超参数p很少在pooling layers中使用。

pooling layers只有filter的两个参数f和s而且都是固定的不需要经过训练得到的所以计算量很少

max pooling:即在filter的滑动范围取最大值优势:忽略其他特征只保留那个最大值的特征降低模型的noise使其比较健壮

average pooling:即在filter的滑动区域进行一个求平均的操作

max pooling用的比average pooling 用的多

10.Convolutional nerual network example

CNN例子:

以一个数字识别为例   第一层由一个conv 和一个pool组成 第二层也是 第三层和第四层是一个全连接最后输出层的激活函数是一个softmax activation

每一层的参数情况如下:

11.why convolutions

为什么使用CNN

参数共享:一个特征检测器(例如:垂直特征检测器)适用于一个图片的一部分也可能会适应图片的另外一个部分

稀疏连接:每一层的输出只与输入部分区域内有关

 

除此之外CNN的参数比较少这就要求所需要的样本可以少一些从而一定程度上不易发生过拟合现象

而且CNN擅长捕捉区域的位置偏移不太易受物体的位置影响增强了网络的准确性和系统的健壮性