- 设计内容及要求
用IDEA设计一个基于Java的手写数字识别程序,要求能识别0~9之间的数字。
- 设计思想
对图片的信息进行处理,首先想到的就是卷积神经网络。
我选用了残差网络,由卷积层、池化层、全连接层组成,并用反向传播算法争取让损失函数降到最小,以此提高准确率。
- 设计原理
3.1 卷积层
我们知道,图像是由一个一个像素点组成的,要做图像处理,首先考虑的就是对像素点的处理。我们把像素点的颜色深度称为灰度值,把对像素点的处理转为对灰度值的处理。
如图3.1所示,一个常规的x是方方正正的,计算机很容易识别出来,但人们日常手写时,难免会有局部加粗,一定角度倾斜等情况,这时候就需要用到卷积神经网络。
图3.1
我们像图3.2那样提取出x的特征
图3.2
把这三个特征图像转为灰度值矩阵
图3.3
图3.3中这三个灰度值矩阵称为特征提取器(过滤器)filter。假设要提取某一个特征,只需要将该过滤器与原图像的灰度值矩阵相卷积(这里设步长为1),若得到了一个全1矩阵,则说明原图像匹配该特征。
图3.4
再将卷积后的矩阵平均后放入结果矩阵中
图3.5
挨个卷积,得到如图3.6所示结果
图3.6
易知,过滤器不同,即可提取出不同的特征
比如垂直边缘检测时,常用矩阵 1 0 -1 来提取特征,如图3.7
1 0 -1