• CNN卷积神经网络入门整合(科普向)


    这是一篇关于CNN入门知识的博客,基本手法是抄、删、改、查,就算是自己的一个笔记吧,以后忘了多看看。
     
    1.边界检测示例
    假如你有一张如下的图像,你想让计算机搞清楚图像上有什么物体,你可以做的事情是检测图像的垂直边缘和水平边缘。
     
     

    如下是一个6*6的灰度图像,构造一个3*3的矩阵,在卷积神经网络中通常称之为filter,对这个6*6的图像进行卷积运算,以左上角的-5计算为例 

    3*1+0*0+1*-1+1*1+5*0+8*-1+2*1+7*0+2*-1 = -5
    其它的以此类推,让过滤器在图像上逐步滑动,对整个图像进行卷积计算得到一幅4*4的图像。

     
     
    卷积计算可以得到图像的边缘,下图0表示图像暗色区域,10为图像比较亮的区域,同样用一个3*3过滤器,对图像进行卷积,得到的图像中间亮,两边暗,亮色区域就对应图像边缘。
     
     
     
    通过以下的水平过滤器和垂直过滤器,可以实现图像水平和垂直边缘检测:
     
    在卷积神经网络中把这些过滤器当成我们要学习的参数,卷积神经网络训练的目标就是去理解过滤器的参数。 常用的过滤器:
     

     

    2. padding
      在上部分中,通过一个3*3的过滤器来对6*6的图像进行卷积,得到了一幅4*4的图像,假设输出图像大小为n*n与过滤器大小为f*f,输出图像大小则为(n−f+1)∗(n−f+1)
      这样做卷积运算的缺点是,卷积图像的大小会不断缩小; 另外图像的左上角的元素只被一个输出所使用,所以在图像边缘的像素在输出中采用较少,也就意味着你丢掉了很多图像边缘的信息。为了解决这两个问题,就引入了padding操作,也就是在图像卷积操作之前,沿着图像边缘用0进行图像填充。
    对于3*3的过滤器,我们填充宽度为1时(加了一圈),就可以保证输出图像和输入图像一样大。6+1+1-3+1=6:
     
     padding的两种模式:
    • same padding 在平面外部补0 ,若且步长是1的话图片大小与原来相同。
    • valid padding 不会超出平面外部,所以输出图像比原来图片要小:(n-f+1)*(n-f+1)
    池化层是在卷积层之后的,会降维,减少特征数
     
    3.卷积步长
    卷积步长是指过滤器在图像上滑动的距离,上两部分步长都默认为1,如果卷积步长为2,卷积运算过程为:
     
     
     
     
     
    4.彩色图像的卷积

      以上讲述的卷积都是灰度图像的,如果想要在RGB(彩色)图像上进行卷积,过滤器的大小不再是3*3而是有3*3*3,最后的3对应为通道数(channels),卷积生成图像中每个像素值为3*3*3过滤器对应位置 和 图像对应位置 相乘累加,过滤器依次在RGB图像上滑动,最终生成图像大小为4*4。注意输出的通道数为1
     
      另外一个问题是,如果我们在不仅仅在图像总检测一种类型的特征,而是要同时检测垂直边缘、水平边缘、45度边缘等等,也就是多个过滤器(多个卷集核)的问题。
      如果有两个过滤器,最终生成图像为4*4*2的立方体,这里的2来源于我们采用了两个过滤器。如果有10个过滤器那么输出图像就是4*4*10的立方体。
      几个过滤器(卷积核),输出的图像通道数就是几。
     
     
     
     
     
    5.单层卷积网络
      上一节中,图像通过两个过滤器得到了两个4*4的矩阵,在两个矩阵上分别加入偏差b1和b2,然后对加入偏差的矩阵做非线性的Relu变换,得到一个新的4*4矩阵,这就是单层卷积网络的完整计算过程。用公式表示:
     
     
     
        如果有10个过滤器参数个数有多少个呢?
    --每个过滤器都有3*3*3+1=28个参数,3*3*3为过滤器大小,1是偏差系数,10个过滤器参数个数就是28*10=280个。不论输入图像大小参数个数是不会发生改变的
     
     
     
     
     
    第L-1层:输入图形通道数=输入图像的层数=过滤器层数
    第L层:输出图像通道数=过滤器个数=第L+1层输入图像层数...(再次强调:不管输入和过滤器多少层,输入图像与每个过滤器卷积过后都是一层矩阵,影响输出层数的只有过滤器的个数
     
    6.简单卷积网络示例
     
     

     
    卷积神经网络层的类型:
    ⦁ 卷积层(convolution,conv)
    ⦁ 池化层(pooling,pool)
    ⦁ 全连接层(Fully connected,FC)
     
    7.池化层
    • 最大池化(Max pooling)
      最大池化思想很简单,以下图为例,把4*4的图像分割成4个不同的区域,然后输出每个区域的最大值,这就是最大池化所做的事情。其实这里我们选择了2*2的过滤器,步长为2。在一幅真正的图像中提取最大值可能意味着提取了某些特定特征,比如垂直边缘、一只眼睛等等
     
    以下是一个过滤器大小为3*3,步长为1的池化过程,具体计算和上面相同,最大池化中输出图像的大小计算方式和卷积网络中计算方法一致,如果有多个通道需要做池化操作,那么就分通道计算池化操作。
     
     
     
    • 平均池化和最大池化唯一的不同是,它计算的是区域内的平均值而最大池化计算的是最大值。在日常应用使用最多的还是最大池化。 
     池化的超参数:
          步长、过滤器大小、池化类型(最大池化or平均池化)
     
    8.卷积神经网络示例

    以下是一个完整的卷积神经网络,用于手写字识别,这并不是一个LeNet-5网络,但是设计令该来自于LeNet-5。
     
    网络各层参数个数表:
     
     
     
     
     
     博文借鉴:https://blog.csdn.net/ice_actor/article/details/78648780
  • 相关阅读:
    Python+selenium常见报错
    jmeter压力测试指标解释
    jemte自动生成测试报告方法
    iview清空Date-picker组件后请求报错解决方法
    【求助】Django+vue项目时候遇到一个问题,table的data数据怎么更新
    django_数据库操作—增、删、改、查
    django-关于manage.py migrate无效的问题
    python家里的环境和公司环境怎么同步
    python class类的属性应用及init初始化实践 ---勇者斗恶龙
    IDLE与pycharm执行相同代码结果却不同,原因分析
  • 原文地址:https://www.cnblogs.com/yh-blog/p/10052543.html
Copyright © 2020-2023  润新知