2017年8月25日 星期五

深度學習(6)--使用Tensorflow實現類AlexNet model 訓練Cifar10數據集



    繼上一篇我們使用Alexnet 模型來訓練MNIST 數據集,這次我們改用Cifar10數據集來做訓練及預測。Cifar10的數據集可以從以下網址下載:
https://www.cs.toronto.edu/~kriz/cifar.html

它總共包含60000張32x32 RGB彩色的圖案,前五個檔案各有10000張圖檔為訓練數據集,最後10000張為測試用數據集。該數據集分成10個類別,以數字編號0-9分別是

airplane        
automobile   
bird              
cat                
deer              
dog               
frog              
horse            
ship              
truck            


      首先,照慣例我會先練習如何讀進Cifar10數據集從原始的二位元檔案至Numpy的矩陣格式,以便後續處理,這樣也可以用matplotlib套件秀出原圖,這樣做的意義是,就像之前所做的手寫數字辨識練習,可以加入自行創建或收集的圖片再進行預測或訓練,就不會只限於原始的數據集。也就是說如果懂得如何將圖片轉成Numpy的矩陣格式,那麼我就可以使用這個圖片做訓練或預測。例如常見的OpenCV套件不僅可以做到將圖片轉成Numpy矩陣格式,並且可以做很多的效果預處理,如裁減、灰化、調整對比或大小等等。

     在Cifar10的數據集裡每一Row 包含的第一個byte為類別標籤,接下來的1024,1024,1024共3072(32x32x3)byte分別代表該圖R,G,B的數據。

     底下一範例程式,便是可以將原始的Cifar10二進位檔讀出,轉成Numpy矩陣資料格式後,
再用Matplotlib套件,便可還原出原始圖檔:
https://github.com/Ashing00/Cifar10/blob/master/read_cifar.py

效果如下圖所示,上面的數字為其對應的類別標籤。