zoukankan      html  css  js  c++  java
  • CNN卷积神经网络学习记录(2)

    再次回顾一下CNN,看到了一篇对CNN理解很到位的文章,所以想以自己的理解记录下来,以便复习。

    下一篇,就开始记录RNN, LSTM的学习历程

    1. 这张图很形象的解释了,filter也就是滤波器,是如何扫过一张图片,加以计算的。以第一个为例子,用图片上的3x3矩阵,和filter相乘,得到卷积的output的第一个数字-5。

     2. 这张图,解释了为什么用滤波器,可以提炼图片的边界信息。假设第一个矩阵,10代表白色,0代表灰色。经过垂直滤波器的扫描后,提取图像的边缘信息。

     

    3. 滤波器的种类有很多,常见的包括水平滤波器,垂直滤波器等:

    4. 通过一个3*3的过滤器来对6*6的图像进行卷积,得到了一幅4*4的图像,假设输出图像大小为n*n与过滤器大小为f*f, 输出图像大小则为(nf+1)(nf+1)(n−f+1)∗(n−f+1)。 这个时候想保证输出和输入的size相同,或者保留一定特征,就需要用到卷积神经网络中的padding。

    一句话总结一下padding,在tensorflow中,padding可以定义两种type,第一种是padding='SAME', 第二种padding='VALID', same padding会在扫描的时候填充矩阵,如图:

    5. 步长就不说了,也就是每次扫描移动的像素,如果为2,则每次横跨2个像素, 一般常用的为1。tensorflow中,stride = [1,1,1,1] 来表示

    tf.nn.conv2d(x, W, strides=[1,1,1,1], padding='SAME')

    第二部分:
    彩色图像的卷积,在input image data中,最后一位代表RGB的颜色,一般黑白为参数为1, 彩色为3。下面这张图,很形象的解释了,为什么最后一位参数为3, 也就是图片的维度,或者高度。如图所示,对应的filter的维度,第三维也应为3。

    1. 在图片特征提取的过程中,我们想要的不仅仅的垂直边距,有可能有水平边距等其他的图像特征,这个时候我们就需要multi filter了,也就是输出的结果会提高维度,如图:输出为(4X4X2), 提取了水平和垂直的图像特征。

    2. 假设有10个滤波器,bias为1, 那参数数量为(3X3X3+1)X10,因此,输出图像的channel,也就是刚开始为彩色的3,编程filter的size大小10。

    下面举一个例子,来详细的解释卷积神经网络的运行过程:
    首先定义一些列的变量来描述卷积神经网络: 
                        

    • 输入图像:39*39*3,符号表示:n[0]H=n[0]W=39nH[0]=nW[0]=39 ;n[0]c=3;nc[0]=3
    • 第1层超参数:f[l]=3f[l]=3(过滤器大小);s[l]=1s[l]=1(步长);p[l]=0p[l]=0(padding大小);n[l]C=10nC[l]=10(过滤器个数)
    • 第1层输出图像:37*37*10,符号表示:n[1]H=n[1]W=37nH[1]=nW[1]=37 ;n[1]c=10;nc[1]=10
    • 第2层超参数:f[2]=5f[2]=5;s[2]=2s[2]=2;p[2]=0p[2]=0;n[2]C=20nC[2]=20
    • 第2层输出图像:17*17*20,符号表示:n[2]H=n[2]W=17nH[2]=nW[2]=17 ;n[2]c=20;nc[2]=20
    • 第3层超参数:f[3]=5f[3]=5;s[3]=2s[3]=2;p[2]=0p[2]=0;n[3]C=40nC[3]=40
    • 第3层输出图像:7*7*40,符号表示:n[3]H=n[3]W=17nH[3]=nW[3]=17 ;n[3]c=40;nc[3]=40
    • 将第三层的输出展开成1960个元素
    • 然后将其输出到logistic或softmax来决定是判断图片中有没有猫,还是想识别图像中K中不同的对象 

     

    池层,也就是pooling,最常用的也就是max pooling,把图像中,像素值最大的提取出来,如图

    举一个例子, 下面的是步长为1,filter为3x3的pooling,方法为max pooling,当然也就average pooling的方法,相比max,max更加的常用,average 是把像素点求平均拿出来到output。

    全连接层 fully-connected layer也就是普通的神经网络dnns,每个神经元之间都有连接,都有weight。

    总结:

    一个完整的手写数字识别卷积神经网络:

    以及运行过程中的矩阵参数的变化列表:

    可以看出在fc layer3中,参数已经达到48001个,也就是在计算的过程中,包括每次训练需要的back propogation。计算量很大,所以在设计神经网络参数的时候,也要考虑到算力的因素。包括之后再讲到过拟合(over fitting),还有 batch Normalization,以及如何把训练好的模型server到disk中。

  • 相关阅读:
    IBM Lotus网站荟萃
    Lotus 深入浅出系列——前言(二)IBM Lotus开发人员的几个境界
    在IIS上配置和测试Perl脚本
    网站推广
    iTOP开发板MiniLinuxC程序调用shell命令
    iTOP4412开发板_驱动_adc驱动升级和测试例程
    最近想入手树莓派3来学习编程同学没有选择4412开发板吗?
    iTOP4412开发板串口转接小板的使用文档
    学习嵌入式4412开发板手把手配套视频_2000人群组在线交流
    电子医疗设备创新研发应该用i.MX6Q开发板吗?为医疗设备提供解决方案
  • 原文地址:https://www.cnblogs.com/ChrisInsistPy/p/9351064.html
Copyright © 2011-2022 走看看