想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

前文我们介绍了如何在Windows环境下安装TensorFlow(人工智能学习入门之TensorFlow2.2版本安装(Windows10) ) 。学习知识最好的方法就是实践了,因此接下来我们通过实操的方式来学习人工智能相关的知识 。
学习人工智能少不了需要一些数据集,比如进行鉴黄的人工智能少不了一些类似的图片 。进行语音识别的人工智能,语料库是少不了的 。对于初学人工智能的同学常常为数据集而发愁 。今天我们就介绍一个非常简单,但很有用的数据集,这就是MNIST 。这个数据集非常适合我们进行人工智能相关算法的学习和练习 。
MNIST 数据集是美国国家标准与技术研究所(National Institute of Standards and Technology,简称NIST)制作的一个非常简单的数据集 。那么该数据集是什么内容呢?其实就是一些手写的阿拉伯数字(0到9十个数字) 。

想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

文章插图
 
NIST在制作数据集的时候还是很认真的 。数据集中的训练集 (training set) 由来自 250 个不同人手写的数字构成,其中 50%是高中学生,50% 来自人口普查局 (the Census Bureau) 的工作人员 。测试集(test set) 也是同样比例的手写数字数据 。
如何下载MNIST数据集MNIST数据集可从其官网(http://yann.lecun.com/exdb/mnist/ )下载,由于是国外网站,下载可能比较慢 。它包含了四个部分:
  • 训练集图片:train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
  • 训练集标签:train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
  • 测试集图片:t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
  • 测试集标签:t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)
上述包含两种类型的内容,一种是图片,另外一种是标签,图片与标签一一对应 。但是这里的图片并非是我们平时看到的图片文件,而是一个二进制的文件 。该数据集以一个二进制的形式对6万个图片进行了存储 。标签则是图片对应的真是数字 。
如下图所示,本文将数据集下载到本地,并且解压后的结果 。为了便于对比,这里面包含原始的压缩包和解压后的文件 。
想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

文章插图
 
数据集的格式简析大家已经发现,压缩包解压后并非一个个的图片,而是每个压缩包对应着一个独立的问题 。而在这个文件中存储着上万个图片或者标签的信息 。那么这些信息是如何存储在这个文件当中的呢?
其实MNIST的官网给出了详细的描述 。以训练集的图片文件为例,官网给出的文件格式描述如下:
想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

文章插图
 
从上图可以看出,前4个32位数是该训练集的描述信息 。其中第一个是魔数,为固定值0x0803;第二个是图片的数量,0xea60,也就是60000;第三个和第四个是图片的大小,也就是图片是28*28像素 。下面则是以一个字节来描述每个像素 。由于该文件中以一个字节来描述一个像素,可以知道像素的值可以是从0到255 。其中0表示白色,而255表示黑色 。
想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

文章插图
 
【想学习人工智能,这个的数据集必须掌握,MNIST入门与实战】标签文件的格式与图片文件的类似 。前面有两个32位数,其中第一个是魔数,固定值0x0801;第二个用于描述标签的数量 。接下来的数据是每个标签的值,用一个字节表示 。这里表示值的范围是
想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

文章插图
 
对应实际训练集的标签文件的数据如下所示 。可以看出与上述格式的描述是一致的 。另外,我们可以看出,对应该标签集,前面几张图片表示的数字分别应该是5,0,4,1等等 。这里大家记一下,后面会用到 。
想学习人工智能,这个的数据集必须掌握,MNIST入门与实战

文章插图
 
关于数据集的文件格式我们了解了,下面我们实际操作一下 。
数据集的可视化处理知道上述数据的存储格式后,我们就可以对数据进行解析了 。比如下面本文实现了一个小程序,用于解析该图片集合中的某个图片,并得到可视化结果 。当然,其实我们可以根据标签集合的值知道图片是什么,这里只是一个实验 。最终结果是以一个文本文件存储的,用字符“Y”表示笔迹,字符“0”表示背景色 。具体程序代码很简单,本文不再赘述 。


推荐阅读