神经网络优化(五) - 卷积网络基础

本节目标:学会使用  CNN  实现对手写数字的识别

上几节重点讲述的 NN :每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果

参数个数:∑ (前层× 后层+ 后层)

从上面可以看出,一张分辨率仅为28*28像素的黑白图像,在神经网络运算时就有近40万个参数待优化;而现实生活中高分辨率的彩色图像,不但像素点增多,而且有红绿蓝三通道信息,这样直接喂入(全连接)神经网络时,待优化参数将无限增大。

待优化参数的增多,容易导致模型的过拟合,为了避免该现象,在实际应用中一般不会将原始图片直接未入全连接网络。

实际操作方案:先对原始图像进行特征提取,然后将特征喂入全连接网络,之后再然全连接网络计算分类评估值。

1 卷积

1.1 无padding的卷积计算

卷积(也称为滤波器)是一种有效提取图像特征的方法。

一般用一个正方形卷积核,遍历图像上的每一个点。图像区域内的每一个像素值乘以卷积核内相对应点的权重,求和,再加上偏置。

输出图像值边长 = (输入图像边长 - 卷积核长 + 1 )/ 步长

备注:

5*5*1的灰度图释义为 5 行 5 列的灰度值:1表示单通道,5*5表示分辨率,在矩阵中意味 5 行 5 列。

3*3*1的卷积核对灰度图进行卷积计算,对应值乘积求和,再加上偏置项 b = 1 ;让卷积核中的 [1, 1] 值遍历 5*5 中的每一个灰度值 。

输出图片边长: ( 输入图像边长 5 - 卷积核边长 3 + 偏置项 1 )/  步长 1 = 3

由于仅用了一个3*3*1卷积核,所以输出的深度是1

1.2 含padding的卷积计算

不含padding的卷积计算图像矩阵长度会不一致;有时为了让图像的输出、输出尺寸一致,会再输入图像像素值周边补充0。

在前面 5x5x1 的图片周围进行全零填充,可使输出图片仍保持 5x5x1 的维度。这个全零填充的过程叫做 padding。

输出数据体的长度为:

  ( W − F + 2P ) / S + 1 

  • W:输入数据体尺寸
  • F:卷积层中神经元感知域
  • S:步长
  • P:零填充的数量。

 在 Tensorflow 框架中,用参数 padding = ‘ SAME ’(全部 0 填充) 或 padding = ‘VALID ’(不用 0 填充) 表示 。

 

两者的结果若非整数,都是采用 “ 向上取整 ” 的方式获得最终值。

示例:

输入图像为32*32*3,卷积核为5*5*3。

不用 0 填充时,输出(32 - 5 + 1)/ 1 = 28

若让输出结果长度与输入的一致,则需要填充几层 0 ?

32 = ( 32 - 5 + 2P) / 1 + 1,计算得 P = 2,故需要填充 2 层零。 

2 Tensorflow中的卷积计算

tensorflow 中计算卷积的函数为 tf.nn.conv2d()

tf.nn.conv2d(
    输入描述 
    卷积核描述
    核滑动步长
    padding
    )

注解:

1)输入描述

 [ batch, 5 , 5, 1 ]

  • batch - 一次喂入图片数量
  • 5, 5 - 两个数组一同描述每张图片的分辨率,5行5列
  • 1 - 图片的通道数,若为灰度图,则为1,若为RGB的彩色,则为3

2)卷积核描述

[ 3, 3, 1, 16 ]

  • 3, 3 - 卷积核的行列分辨率
  • 1 - 通道数,卷积核的通道数是由输入图片的通道数决定的,其必须与输入图片的通道数一致
  • 16 - 该卷积核数量,共计进行16次卷积运算,则输入图片的深度为16,也说明输出是16通道

 

猜你喜欢

转载自www.cnblogs.com/gengyi/p/10166480.html