CNN 用于手写体的识别

文章目录

    • 一、卷积神经网络(CNN)基本概念
    • 二、CNN 基本模块
      • 1.输入层
      • 2.卷积层
      • 3.池化层
      • 4.ReLU 层(非线性激活函数)
      • 5.全连接层
    • 三、CNN 用于手写体识别网络结构
    • 四、CNN 用于手写字体识别代码理解

一、卷积神经网络(CNN)基本概念

卷积神经网络是一种多层神经网络,擅长处理图像特别是大图像的相关机器学习问题。卷积网络通过一系列方法,成功将数据量庞大的图像识别问题不断降维,最终使其能够被训练。

二、CNN 基本模块

CNN 由输入层、隐藏层和输出层构成,其中隐藏层又包括卷积层、池化层、ReLU 层以及全连接层。

1.输入层

输入层一般是一个二维向量,但也可以多通道,如 RGB 图像。

2.卷积层

CNN 用于手写体的识别_第1张图片
可以看到,现在有一张 5x5 的图片,利用 3x3 的卷积核,步长为 1(即每次滑动一个维度)
1  0  1

0  1  0

1  0  1

得到 3x3 的卷积结果(图中的橙色部分可以理解为一个滑动窗口)。
这个过程我们可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。在实际训练过程中,卷积核的值是在学习过程中学到的。
简单来说,卷积层是用来对输入层进行卷积,提取更高层次的特征。

3.池化层

池化层又称下采样,它的作用是减小数据处理量同时保留有用信息,池化又分为最大池化和平均池化,前者是选择区域中的最大值,而后者是取区域中的平均值,最大池化一般采用得比较多。
CNN 用于手写体的识别_第2张图片
可以看到,原始图片是 20x20 的,采样窗口是 10x10 的(步长为 10 ),最终将其下采样为一个 2x2 的特征图。
之所以要进行下采样,是因为卷积之后的图片仍然很大(因为卷积核比较小)。因为卷积已经提取出特征,相邻区域的特征类似,近乎不变,这时池化只是选出最能表征特征的像素,缩减了数据量,同时保留了特征。

4.ReLU 层(非线性激活函数)

属于非线性激活函数的一种,同类型的函数还有sigmoid函数,tanh函数,softplus函数等等,4 种函数的图形表现形式如下:
CNN 用于手写体的识别_第3张图片
CNN 用于手写体的识别_第4张图片

5.全连接层

全连接层需要把输入拉成一个列项向量,比如上一层的输出是 2x2的向量,那么你需要把这个向量拉成 4x1 的向量,如果是 3x2x2,则拉成 12x1 的向量,这时候,再乘以一个权重,需要把这 12 个像素点都包含进去,因此这个权重矩阵形式为 1x12(固定的),所以要求输入的 feature map 大小一样。
全连接层的输出是一个n*1大小的向量,并通过几个全连接层对向量进行降维操作,与class进行对应。
全连接层与卷积层的区别

从上面可以看出,全连接层的权重矩阵是固定的,即每一次feature map的输入过来必须都得是一定的大小(即与权重矩阵正好可以相乘的大小),所以网络最开始的输入图像尺寸必须固定,才能保证传送到全连接层的 feature map 的大小跟全连接层的权重矩阵匹配。

卷积层就不需要固定大小了,因为它只是对局部区域进行窗口滑动

三、CNN 用于手写体识别网络结构

CNN 用于手写体识别网络模型
CNN 用于手写体的识别_第5张图片

CNN 用于手写体的识别_第6张图片

四、CNN 用于手写字体识别代码理解

参考博客:
http://www.cnblogs.com/fydeblog/p/7450413.html
https://blog.csdn.net/u012905422/article/details/52601022
https://blog.csdn.net/zxyhhjs2017/article/details/78605283
https://blog.csdn.net/glory_lee/article/details/77899465

你可能感兴趣的:(深度学习)