根據官網 http://yann.lecun.com/exdb/mnist/ 的文件格式的定義windows
TRAINING SET LABEL FILE (train-labels-idx1-ubyte):編輯器
[offset] [type] [value] [description] 3d
0000 32 bit integer 0x00000801(2049) magic number (MSB first) blog
0004 32 bit integer 60000 number of items 圖片
0008 unsigned byte ?? label ip
0009 unsigned byte ?? label 開發
........ get
xxxx unsigned byte ?? labelit
The labels values are 0 to 9.io
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
idx3-ubyte 的
1.Magic number。即幻數,它能夠用來標記文件或者協議的格式,不少文件都有幻數標誌來代表該文件的格式。idx3-ubyte的做者也遵循常例。2051是圖片,2049是文本。
2.number of images / number of items 。
3.內容。像素或文字
能夠查看文件字節的文本編輯器打開解壓出來的train-images.idx3-ubyte
截取前面幾行。這些都是16進制的。
第一部分 a爲0000 0803。 轉爲10進制就是
(0000 0803)10 = 2051. 即magic number是2051,圖片格式
第二部分爲0000 ea60。轉爲10進制就是6000。說明這個文件包含6000個圖片。
第三部分和第四部分,都是 0000 001c。轉爲10進制就是28,說明圖片的長、寬是28.
以上4個部分,全部信息都是佔用4個字節(結構圖中的type = 32 bit intege)。
第五部分圖片的像素位,只佔用1個字節(結構圖中的type =unsigned byte)。
咱們開始數字節文本,在第四部分的後面,一共有152 個「00」 (圖中的紅框),而後是03 12 12 7e 88。這裏是16進制。也就是03(0x03),18(0x12),18(0x12),18(0x12),126(0x7e),136(0x88)
由於前面定義了一個圖像是28*28,152應該被分解爲28*5+12,表明第一張圖的前5行的像素都是00,及第6行的前12位像素也是00,第6行的第13位像素是03,14位是18。。。。。
利用網上找的程序,生成第一張的圖像以下:
利用windows自帶的圖像編輯軟件取色,鼠標放到x-5 y-12位置,開發依次比較,發現像素符合邏輯。