图像识别猫狗大战——初学代码之随笔

图像识别猫狗大战——初学代码之随笔

训练集:12500张猫,12500张狗

 

  1. 读取数据标签

  item_label = item.split('.')[0]

  # 文件名形如 cat.0.jpg, 只需要取第一个。
  # 将item以字符'.'为分割方式截取子串,存入字符串向量,获取向量的第[0]个元素。
  # 如item='cat.0.jpg', 则item.split('.')[0]='cat'.
  # 如item='1.cat.0.jpg', 则item.split('.')[0]='1', item.split('.')[1]='cat'.

  2. 关于epoch、 iteration和batchsize的概念

  深度学习中经常看到epoch、 iteration和batchsize,下面按自己的理解说说这三个的区别:

  (1)batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
  (2)iteration:1个iteration等于使用batchsize个样本训练一次;
  (3)epoch:1个epoch等于使用训练集中的全部样本训练一次。

  举个例子,训练集有1000个样本,batchsize=10,那么:
  训练完整个样本集需要:
  100次iteration,1次epoch。

  3. 各层参数详解: 

  (1)INPUT层-输入层

  首先是数据 INPUT 层,输入彩色图像的尺寸统一归一化为208*208*3.

  注意:本层不算算法的网络结构,传统上,不将输入层视为网络层次结构之一。 

  (2)C1层-卷积层 

  输入图片:208*208*3

  卷积核大小:3*3 

  卷积核个数:16

  可训练参数:(3*3+1) * 16=160(每个滤波器3*3=9个unit参数和1个bias参数,一共16个滤波器)

  输出featuremap大小:208*208 *16(padding:True)

               output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1 = (208+1*2-3)/1+1=208

  神经元数量:208*208*16

  连接数:(3*3+1)*16*208*208=6922240

 

  详细说明:对输入图像进行第一次卷积运算(使用 16 个大小为 3*3 的卷积核),得到16个C1特征图(16个大小为208*208的 feature maps, 卷积前已将208*208*3的图像补齐为210*210*3,padding=1)。我们再来看看需要多少个参数,卷积核的大小为3*3,总共就有16*(3*3+1)=160个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的3*3个参数和1个bias参数有连接,所以总共有160*208*208=6922240个连接(connection)。有6922240个连接,但是我们只需要学习160个参数,主要是通过权值共享实现的。

 ------------------------------------------------------ 以下内容未修改完成,待续---------------------------------------------------------------------------------------------------------------------------------------------------

3、S2层-池化层(下采样层)

 

      输入:28*28

 

      采样区域:2*2

 

      采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

 

      采样种类:6

 

      输出featureMap大小:14*14(28/2)

 

      神经元数量:14*14*6

 

      可训练参数:2*6(和的权+偏置)

 

      连接数:(2*2+1)*6*14*14

 

      S2中每个特征图的大小是C1中特征图大小的1/4。

 

       详细说明:第一次卷积之后紧接着就是池化运算,使用 2*2核 进行池化,于是得到了S2,6个14*14的 特征图(28/2=14)。S2这个pooling层是对C1中的2*2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。于是每个池化核有两个训练参数,所以共有2x6=12个训练参数,但是有5x14x14x6=5880个连接。

 

4、C3层-卷积层

 

       输入:S2中所有6个或者几个特征map组合

 

      卷积核大小:5*5

 

      卷积核种类:16

 

      输出featureMap大小:10*10 (14-5+1)=10

 

      C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合。

 

       存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。则:可训练参数:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516

 

       连接数:10*10*1516=151600

 

       详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个10x10的特征图,卷积核大小是 5*5. 我们知道S2 有6个 14*14 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:

 

网络解析(一):LeNet-5详解

 

       C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为5*5,所以总共有6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516个参数。而图像大小为10*10,所以共有151600个连接。

 

网络解析(一):LeNet-5详解

 

        C3与S2中前3个图相连的卷积结构如下图所示:

 

网络解析(一):LeNet-5详解

 

       上图对应的参数为 3*5*5+1,一共进行6次卷积得到6个特征图,所以有6*(3*5*5+1)参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。

 

5、S4层-池化层(下采样层)

 

       输入:10*10

 

       采样区域:2*2

 

      采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

 

      采样种类:16

 

      输出featureMap大小:5*5(10/2)

 

      神经元数量:5*5*16=400

 

      可训练参数:2*16=32(和的权+偏置)

 

      连接数:16*(2*2+1)*5*5=2000

 

      S4中每个特征图的大小是C3中特征图大小的1/4

 

      详细说明:S4是pooling层,窗口大小仍然是2*2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。这一层有2x16共32个训练参数,5x5x5x16=2000个连接。连接的方式与S2层类似。

 

6、C5层-卷积层

 

     输入:S4层的全部16个单元特征map(与s4全相连)

 

     卷积核大小:5*5

 

     卷积核种类:120

 

     输出featureMap大小:1*1(5-5+1)

 

     可训练参数/连接:120*(16*5*5+1)=48120

 

     详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下:

 

网络解析(一):LeNet-5详解

 

7、F6层-全连接层

 

      输入:c5 120维向量

 

      计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。

 

      可训练参数:84*(120+1)=10164

 

      详细说明:6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。ASCII编码图如下:

 

网络解析(一):LeNet-5详解

 

     F6层的连接方式如下:

 

网络解析(一):LeNet-5详解

 

8、Output层-全连接层

 

       Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

 

网络解析(一):LeNet-5详解

 

     上式w_ij 的值由i的比特图编码确定,i从0到9,j取值从0到7*12-1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84x10=840个参数和连接。

 

网络解析(一):LeNet-5详解

 

上图是LeNet-5识别数字3的过程。

 

posted @ 2019-10-09 16:54  酒茗水  阅读(598)  评论(0编辑  收藏  举报