通过深度学习神经网络,基于MNIST实现手写数字识别算是深度学习里的“Hello world”了,记录一下个人的实现过程。
思路
将图片格式化成28*28=784像素的灰度图片,如下图:
![b3bd1403a20192d54e241d633f63257a.png](https://i-blog.csdnimg.cn/blog_migrate/5acbc3a3ca600ffd6c24d9f639957fad.jpeg)
每个像素都是一个0~255的颜色值,这样我们就得到了如下数组:
![4d525f5dbe441520cbdb3e15a9e128b9.png](https://i-blog.csdnimg.cn/blog_migrate/8e7a5483b9a9f549b23a6e893843d650.jpeg)
此为输入层。
收集手写图片,制成标准化的图片还是很麻烦的,可以使用MNIST提供好的图片:
![9232cc5f9e6e9d37548c6812da0f23e8.png](https://i-blog.csdnimg.cn/blog_migrate/23413318448fa953762bd2dc4813ebeb.jpeg)
也可以使用已经数字化的文件:
![299a9928dc999c86b32e4cdd9bbd2d87.png](https://i-blog.csdnimg.cn/blog_migrate/edf7836f7a06c1c33b8f956151cad343.jpeg)
以mnist_test_10.csv的一组数据为例,每行代表一张手写数字图片的颜色值数组,“,”分隔,第一个是手写数字的真实值。
我们将其从文件里取出来,解析并展示一下,代码:
import numpyimport matplotlib.pyplot#从文件取出数据data_file=open("mnist_test_10.csv","r")data_list=data_file.readlines()data_file.close#把数组转为图像显示,第一个数字是7allVals=data_list[0].split(",")#asfarray把数组转成浮点数组,[1:]从第2个取到最后一个元素,reshape把一维数组改成28*28的二维数组imgArr=numpy.asfarray(allVals[1:]).reshape((28,28))