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


    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

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

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

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

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

    假设图片的颜色通道为nc,n 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]逐渐增加,最后一层,将图片化为一个向量(7x7x40,1)的向量,与最后一层的输出层相连接

    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擅长捕捉区域的位置偏移,不太易受物体的位置影响,增强了网络的准确性和系统的健壮性

  • 相关阅读:
    selenium之css定位
    selenium之Xpath定位
    配置JAVA_HOME踩得坑 。。
    linux 怎么查看系统的环境变量 与设置jdk 系统环境变量
    jenkins添加环境变量 ,win 10的 环境变量如下,win7 就是不加也可以运行,不报 “python 不是内部命令 ” 的错误。
    win7 bat copy 一个文件 到另外的文件夹内,路径得用引号哦
    路由器原理
    mven入门
    局域网内和局域网间的通信
    详解DNS域名解析全过程
  • 原文地址:https://www.cnblogs.com/Dar-/p/9471326.html
Copyright © 2020-2023  润新知