一.MNIST手写字体文件说明


MNIST手写字体数据库下载地址http://yann.lecun.com/exdb/mnist/ 。
MNIST手写字体的数据库说明在下载网站的下面也有,为了便于写程序,数据库文件说明如下:
从上面的数据库说明可以看出来,MNIST手写字体数据库包含了是个文件,每个文件都是单纯的普通文件格式,因此,可以采用C++的文件流将其打开,每一个文件除了几个字节的文件头之外,就是剩下的要数据部分了。因此,可以先将文件的文件头读进来,然后利用magic number进行验证,验证所读的文件是否为MNIST文件。
由于MNIST存储的格式是大端存储的,和大部分Intel处理器的存储方式不同,所以,直接将文件头的前面四个直接存储为int类型或者long类型的话,是无法获得正确的数值的,还需要进行从大端模式到小端模式的转换,而且,在不同的处理器上面,int类型和long类型存储的位数是不一样的,所以,用int类型或者long类型来读取文件头的前面四个字节不具有可移植性。
在C++标准中,char类型的长度被定义为一个字节,这个在不同的处理器上面是不变的,因此,可以采用char类型的数组来存储文件头的部分,同时,使用char类型的数组来进行大端模式到小端模式的转换也是很容易的。
大端模式和小端模式的定义的区别如下:
大端模式:高位字节放在内存低地址处,低位字节放在内存高地址处;
小端模式:低位字节放在内存低地址处,高位字节放在内存高地址处;Intel处理器一般为小端模式。