假设我们有一个32\*32\*3格式的图片,将这个图片与一个5\*5的卷积核进行卷积,将可以得到一个28\*28的矩阵。这里输入数据中的第三个维度,也就是频道数,在卷积过程中求和,所以输出数据的第三个维度为1,而不是3。
卷积层是卷积神经网络的重要组成部分。卷积层顾名思义是对(上一层的)输入数据进行卷积运算,将得到的结果传递给下一层。那么卷积层有什么作用呢?卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征,如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。卷积神经网络由多个上述这样结构的卷积层组成。除了卷积层之外,还包括池化(Pooling)层和全连接(FullConnection)层。
池化层实际上是一种形式的向下采样。有多种不同形式的非线性池化函数,而其中最大池化(MaxPooling)和平均采样是最为常见的。Pooling层相当于把一张分辨率较高的图片转化为分辨率较低的图片。Pooling层可进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的。全连接层使用与普通神经网络一样的连接方式,一般都在最后几层。
7.4.3 CNN 实例
我们的任务是从几万张带标签的手写数字图片中训练一个分类器,来正确识别图片所写的数字。数据集由阿拉伯数字0\~9组成。该数据集来自经典的手写体图片数据库MINST,用于设计算法和模型,被称为计算机视觉领域的“HelloWorld”,如图7-18所示。
这个数据集中,每个样本代表一个数字图片,图片全部是黑白的。在这个案例中,我们会用到CNN作为分类器,具体会用到LeNet-5神经网络结构。LeNet-5是一种经典的卷积神经网络结构,由YannLeCun发明,专业用于识别手写体和印刷体文字,并且表现得十分出色。我们以这个任务为情景,以LeNet-5为分类器模型,来介绍TensorFlow是如何完成卷积神经网络的识别任务的(TensorFlow会在后面三章中详细讲解)。识别过程如图7-19所示。
第7章 深度学习
205