Tensorflow的学习笔记--卷积网络

前面说的都是全连接NN的demo,(每个神经元余额前后的相邻的每一个神经元都有链接关系,输入特征,输出为预测结果)

在全连接NN中,一张分辨率为28*28的黑白图像, 有784个数据,如果我们采用了500个样本整个的参数的个数为:

1
2
第一层: 784*500+500 
第二层: 500*10+10

算下来接近40w个参数,参数过多,容易导致模型过拟合,如果换成高分辨率的彩色图像,问题会更为严重。 为了解决这个问题一般会首先提取图像的特征,把提取后的特征再喂给全连接网络,再对参数进行优化。

卷积

卷积是一种提取图片特征的方法,一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积内相对应的权重,然后求和,再加上偏置后,最后输出一个图片的像素值(图片来自网络,侵权请联系删除)。

tensorflow{:height=”600px” width=”600px”}

全零填充Padding

正常的卷积会导致图片的缩小,为了能够让输入和输出的图片尺寸一致,对图片周围的空数据进行全0填充。(图片来自网络,侵权请联系删除)。

tensorflow{:height=”600px” width=”600px”}

tensorflow中的卷积处理

在tensorflow中,使用tf.nn.conv2d方法来实现卷积的算法. conv2d有四个参数,对图片的描述,卷积核的描述,卷积核的滑动步长和是否使用padding.

具体参数描述:

  1. 对输入图片的描述:用batch给出一次喂入多少张图片,每张图片的分辨率大小,比如5行5列,以及这些图片包含几个通道的信息,如果是灰度图则是单通道,参数是1 ,彩色图像是3.
  1. 对于卷积核的描述: 要给出卷积的行分辨率和列分辨率,通道数以及用了几个卷积核。卷积核的通道数是由输入图片的通道数决定的,卷积核的通道数等于输入图片的通道数,所以卷积核的通道数也是1。

  2. 对卷积核滑动步长的描述: 第一个参数和最后一个参数是固定的,第二个和第三个表示滑动步长。

  3. 是否使用padding:padding=’valid’ 代表使用padding

多通道图片卷积

在大多数情况下,输入的图片是RGB三个颜色组成的彩色图。输入的图片包含红绿蓝三层数据,卷积核的深度应该等于输入图片的通道数.

多层卷积的计算方法和单层卷积核相似,卷积核为了匹配红绿蓝的三个颜色,把三层的卷积核套在三层的彩色图片上,重合的像素进行累加,再加上偏置项b,最终得到输出的值。

tensorflow{:height=”600px” width=”600px”}

池化

池化是对图片的像素进行优化和简化,具体过程如下图:

tensorflow{:height=”600px” width=”600px”}

池化包括对最大值池化和平均值池化。