mnist手写数字体识别CNN训练测试完美复现,以及自己手写数字进行测试

  • Post author:
  • Post category:其他


mnist手写数字体识别,算是计算机视觉、图像识别领域的入门级demo了。就好像你学习编程首先要打出一个’hello world’。

实现手写数字体识别有多种方式,可以用回归法,可以用CNN,可以用RNN,等等。代码简洁程度不同,训练的精度也不尽相同。




1、mnist数据集介绍

这个数据集是来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据。

为什么要找这么多人来写呢?就是要增强学习结果的泛化能力,避免最后只认识某几个人的手写体。

import pylab
print('训练数据:',data.train.images)
print('训练集尺寸:',data.train.images.shape)
print('训练集标签尺寸:',data.train.labels.shape)
print('测试集尺寸:',data.test.images.shape)
print('测试集标签尺寸:',data.test.labels.shape)
'''
回归:
训练数据: [[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]
训练集尺寸: (55000, 784)
训练集标签尺寸: (55000, 10)
测试集尺寸: (10000, 784)
测试集标签尺寸: (10000, 10)
'''

可以看到,在这个数据集中,训练集一共有55000个图片,存放在一个矩阵数组中,每一行是一个图片。测试机一共有10000个图片。他们对应的标签就是one_hot编码,例如数字0的标签是1000000000,数字1的标签是0100000000,以此类推。

打印几张mnist中的图片来看一下



版权声明:本文为wander_ing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。