机器学习编程:从编码到深度学习
上QQ阅读APP看书,第一时间看更新

6.1.1 MNIST入门

MNIST是一组带标签的图像集合,专门为监督学习组装而成。名字含义是“改良的(modified)NIST”,通过对美国国家标准与技术研究所(National Institute of Standards and Technology,NIST)早期的样本数据集进行重新组合而形成。MNIST样本数据集主要包含了若干手写体数字图像,其数值即为图像的标签。以下是一些从该数据集中随机抽取的图片样本,并附有标签:

每个数字图像由28乘28个灰度像素组成,每个像素使用一个字节表示。在MNIST的灰度图中,0代表“完美的白背景”,255代表“完美的黑前景”。下图是某个数字图像样本的一个特写:

以现代机器学习的标准来衡量,这个MNIST数据集虽然并不算大,但也不算很小。它一共包含70 000个样本,按照从0到9的数字顺序,被整齐地划分为7 000组样本。数字是从实际问题中采集的真实手写数字,所以它们具有多样性,正如下面这个随机排列的5所证明的那样。

虽然我的年纪不算大,但是在阅读这些5的时候也有些困难。有些数字看起来就像潦草的字迹。如果我们能够编写一个可以识别这些数字的计算机程序,那么肯定会有炫耀的资本。

MNIST等样本数据集是机器学习社区的天赐之物。尽管机器学习的算法很酷,但它需要很大的工作量来收集、标记、清理和预处理样本数据。MNIST的维护者为我们做了这些工作。他们收集图像、贴上标签、缩放到相同的大小、旋转、居中,并转换成相同的灰度范围。你可以直接将这些样本数据输入学习程序。

MNIST将图像和标签存储在单独的文件中。有很多程序库可以读取这些数据,格式非常简单,因此编写我们自己的阅读器是有意义的。我们会用几页的篇幅来完成对阅读器的编写。

顺便说一下,你不必下载MNIST文件,可以在包含本书源代码的data目录中找到它们。浏览一下这个文件目录,你就会看到MNIST样本数据集由4个文件组成。其中两个文件分别包含60 000张图片和相应的标签。另外两个文件分别包含留作测试的其余10 000个图像和标签。

你可能想知道为什么我们在训练和测试中没有使用相同的图像和标签。回答这个问题需要偏离一下主题。