FRAGMENT
MNIST 手写数据集格式
数据特点:
- 数据用一种非常简单的文件格式存储,这种格式是专门为存储向量和多维矩阵设计的。最后一节介绍了这种格式(IDX格式)。
- 文件中的所有整数都采用MSB优先(高字节序)格式存储,这是大多数非Intel处理器使用的格式。使用Intel处理器和其他低字节序机器的用户必须翻转头部的字节。
共有 4 个文件:
train-images-idx3-ubyte: training set images
train-labels-idx1-ubyte: training set labels
t10k-images-idx3-ubyte: test set images
t10k-labels-idx1-ubyte: test set labels训练集有60000个样本,测试集有10000个样本。测试集的前5000个样本来自原始的NIST训练集,后5000个来自原始的NIST测试集。前5000个比后5000个更干净、更简单。
训练集格式
### TRAINING SET LABEL FILE (train-labels-idx1-ubyte):
[offset] [type] [value] [description]
0000 32 bit integer 0x00000801(2049) magic number (MSB first)
0004 32 bit integer 60000 number of items
0008 unsigned byte ?? label
0009 unsigned byte ?? label
........
xxxx unsigned byte ?? label
The labels values are 0 to 9.
### TRAINING SET IMAGE FILE (train-images-idx3-ubyte):
[offset] [type] [value] [description]
0000 32 bit integer 0x00000803(2051) magic number
0004 32 bit integer 60000 number of images
0008 32 bit integer 28 number of rows
0012 32 bit integer 28 number of columns
0016 unsigned byte ?? pixel
0017 unsigned byte ?? pixel
........
xxxx unsigned byte ?? pixel
Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).
测试集格式
### TEST SET LABEL FILE (t10k-labels-idx1-ubyte):
[offset] [type] [value] [description]
0000 32 bit integer 0x00000801(2049) magic number (MSB first)
0004 32 bit integer 10000 number of items
0008 unsigned byte ?? label
0009 unsigned byte ?? label
........
xxxx unsigned byte ?? label
The labels values are 0 to 9.
### TEST SET IMAGE FILE (t10k-images-idx3-ubyte):
[offset] [type] [value] [description]
0000 32 bit integer 0x00000803(2051) magic number
0004 32 bit integer 10000 number of images
0008 32 bit integer 28 number of rows
0012 32 bit integer 28 number of columns
0016 unsigned byte ?? pixel
0017 unsigned byte ?? pixel
........
xxxx unsigned byte ?? pixel
Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).
IDX格式
IDX 文件格式是一种简单的格式,用来存储各种数值类型的向量和多维矩阵。
其基础格式如下:
magic number
size in dimension 0
size in dimension 1
size in dimension 2
.....
size in dimension N
data
magic number 是一个整数(高位字节在前)。前两个字节总是0。
第三个字节编码如下数据:
0x08: unsigned byte
0x09: signed byte
0x0B: short (2 bytes)
0x0C: int (4 bytes)
0x0D: float (4 bytes)
0x0E: double (8 bytes)
- 第4个字节表示向量/矩阵的维数:1表示向量,2表示矩阵……
- 每一维的大小都是4字节整数(最高有效字节在前,大端序,就像大多数非Intel处理器那样)。
- 数据的存储方式和C数组一样,也就是说,最后一维的下标变化得最快。