想學習人工智能,這個的數據集必須掌握,MNIST入門與實戰
學習人工智能少不了需要一些數據集,比如進行鑒黃的人工智能少不了一些類似的圖片。進行語音識別的人工智能,語料庫是少不了的。對于初學人工智能的同學常常為數據集而發愁。今天我們就介紹一個非常簡單,但很有用的數據集,這就是MNIST。這個數據集非常適合我們進行人工智能相關算法的學習和練習。
MNIST 數據集是美國國家標準與技術研究所(National Institute of Standards and Technology,簡稱NIST)制作的一個非常簡單的數據集。那么該數據集是什么內容呢?其實就是一些手寫的阿拉伯數字(0到9十個數字)。
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的官網給出了詳細的描述。以訓練集的圖片文件為例,官網給出的文件格式描述如下:
從上圖可以看出,前4個32位數是該訓練集的描述信息。其中第一個是魔數,為固定值0x0803;第二個是圖片的數量,0xea60,也就是60000;第三個和第四個是圖片的大小,也就是圖片是28*28像素。下面則是以一個字節來描述每個像素。由于該文件中以一個字節來描述一個像素,可以知道像素的值可以是從0到255。其中0表示白色,而255表示黑色。
標簽文件的格式與圖片文件的類似。前面有兩個32位數,其中第一個是魔數,固定值0x0801;第二個用于描述標簽的數量。接下來的數據是每個標簽的值,用一個字節表示。這里表示值的范圍是
對應實際訓練集的標簽文件的數據如下所示。可以看出與上述格式的描述是一致的。另外,我們可以看出,對應該標簽集,前面幾張圖片表示的數字分別應該是5,0,4,1等等。這里大家記一下,后面會用到。
關于數據集的文件格式我們了解了,下面我們實際操作一下。
數據集的可視化處理
知道上述數據的存儲格式后,我們就可以對數據進行解析了。比如下面本文實現了一個小程序,用于解析該圖片集合中的某個圖片,并得到可視化結果。當然,其實我們可以根據標簽集合的值知道圖片是什么,這里只是一個實驗。最終結果是以一個文本文件存儲的,用字符“Y”表示筆跡,字符“0”表示背景色。具體程序代碼很簡單,本文不再贅述。
我們運行上述代碼,可以得到一個名為image.txt的文件??梢钥吹皆撐募膬热萑缦隆F渲屑t色筆記是后面添加了,主要是為看的清楚一些。從圖中內容可以看出,這個其實就是手寫的“5”。
前面我們通過原生的Python接口對數據集進行了可視化的解析。Python有很多已經實現好的庫函數,因此我們可以通過一個庫函數簡化上述功能。
基于第三方庫解析數據
采用原生的Python接口實現起來略顯復雜。我們知道Python有很多第三方庫,因此我們可以借助第三方庫來實現對數據集的解析和展示,具體代碼如下。
上述代碼中分為兩步,第一步是將數據集解析到數組中,第二步是對數組中的某個圖片進行顯示。這里顯示也是通過文本的方式程序,只不過不是存儲在文件中,而是打印在終端。比如我們依然打印第一個圖片,其效果如下:
上述結果的呈現只是通過字符來模擬圖片。其實我們可以借助第三方庫實現更加完美的圖片呈現。接下來我們介紹一下如何通過matplotlib庫來呈現圖片。這個庫非常有用,后續還會接觸到這個庫。
我們實現一個
此時可以看到
實現上述功能的時候可能會缺少一些第三方庫,比如matplotlib等。此時需要我們手動進行安裝,具體方法如下:
基于TensorFlow的數據解析
MNIST是如此出名,以至于TensorFlow已經對其進行了支持。因此,我們可以通過TensorFlow對其進行加載和解析。下面我們給出用TensorFlow實現的代碼。
該代碼實現的最終效果與上一個實例一致,這里不再贅述。