MNIST手写数字图像数据集文件的构成

写这篇博客似乎有点多余,因为网上已经有很多有关MNIST数据集的介绍。但我还是想按照自己的实践,把MNIST手写数字图像数据集文件的构成描述一下以备忘。

一、下载MNIST数据集

可以在这个地址下载:http://yann.lecun.com/exdb/mnist/。下载后,经过一系列解压,最后得到4个文件,分别是:

  • t10k-images.idx3-ubyte
  • t10k-labels.idx1-ubyte
  • train-images.idx3-ubyte
  • train-labels.idx1-ubyte

二、使用16进制编辑器查看文件

1、t10k-images.idx3-ubyte文件

我们先来看文件:t10k-images.idx3-ubyte。用Okteta软件打开后的内容截图如下:
MNIST手写数字图像数据集文件的构成_第1张图片
文件头由4个部分构成,分别各占据4个字节:

  • 第1部分:0000 ~ 0003。内容为:00 00 08 03。这部分内容称为 magic number,即魔术数字。在维基百科中有这样的描述 “魔术数字也会在文件中使用。在特定文件格式中加入固定数值和固定字符串,然后便可以通过检查文件是否包含这些数据来快速地识别文件格式。” 这里的“00 00 08 03”(16进制)表示是图片,转换成10进制为2051。
  • 第2部分:0004 - 0007,内容为:00 00 27 10。这部分内容表示图片的数量,换算成10进制是10000。
  • 第3部分:0008 - 000B,内容为:00 00 00 1C。这部分的意思是每张图片由多少行的点构成,换算成10进制是28。
  • 第4部分:000C - 000F,内容为:00 00 00 1C。这部分的意思是每张图片由多少列的点构成,换算成10进制也是28。

后面的内容就是每张图片的数据,为了更为直观的观察,我把前4部分的内容去掉,并按每行28个字节来显示文件内容,见下图:

MNIST手写数字图像数据集文件的构成_第2张图片

这样看起来是不是很直观!

从中可以看到组成图像的每个点占据1个字节,取值范围是00~FF(即0至255)。

2、t10k-labels.idx1-ubyte文件

MNIST手写数字图像数据集文件的构成_第3张图片
文件头由两个部分构成,分别各占据4个字节:

  • 第1部分:0000 ~ 0003。内容为:00 00 08 01。这部分的意思同上一个文件,不过这里的内容是“00 00 08 01”(16进制),表示内容是文本,转换成10进制为2049。
  • 第2部分:0004 - 0007,内容为:00 00 27 10。这部分内容表示标签的数量,换算成10进制是10000,与上一个文件相同。

后面的内容是每张图片对应的标签数据。我们把 t10k-labels.idx1-ubyte 文件与 t10k-images.idx3-ubyte 文件对比观察,就会发现他们是一一对应的。例如,上一张截图显示了7与2的图像,在这张截图中我们可以看到在第2部分“00 00 27 01”后面跟着的就是“07 02 01 00”。

train-images.idx3-ubyte 和 train-labels.idx1-ubyte 文件的结构也是如此,这里不再赘述。

你可能感兴趣的:(人工智能,人工智能,神经网络,深度学习)