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中。

猜你喜欢

转载自www.cnblogs.com/ChrisInsistPy/p/9351064.html