TF Boys (TensorFlow Boys ) 養成記(四):TensorFlow 簡易 CIFAR10 分類網絡


前面基本上把 TensorFlow 的在圖像處理上的基礎知識介紹完了,下面我們就用 TensorFlow 來搭建一個分類 cifar10 的神經網絡。

首先准備數據:

cifar10 的數據集共有 6 萬幅 32 * 32 大小的圖片,分為 10 類,每類 6000 張,其中 5 萬張用於訓練, 1 萬張用於測試。數據集被分成了5 個訓練的 batches 和 1 個測試的 batch。每個 batch 里的圖片都是隨機排列的。官網上提供了三個版本的下載鏈接,分別是 Python 版本的,Matlab 版本的和二進制文件版本的。其中,Python 版本的數據格式,官網上給了讀取數據的代碼,Matlab 版本的數據和 Python 版本的數據格式差不多。二進制版本的數據,有 5 個訓練用的 batches,data_batch_1.bin ~ data_batch_5.bin 和一個測試用的 test_batch.bin,每個 bin 文件的格式如下:

<1 x label><3072 x pixel>
...
<1 x label><3072 x pixel>

共有一萬行,每行 3073 個字節,第一個字節表示標簽信息,剩下的 3072 字節分為 RGB 三通道,每個通道 1024( = 32 * 32) 個字節,注意,行與行之間沒有明顯的區分標識符,所以整個 bin 文件字節長度恰好是 3073 萬。

考慮到 TensorFlow 可以讀取固定長度格式的數據(用 tf.FixedLengthRecordReader  ),我們下載二進制格式的數據。新建文件夾/home/your_name/TensorFlow/cifar10/data,從cifar10 官網上下載二進制格式的文件壓縮包,解壓到此文件夾,得到 cifar-10- batches-bin 文件夾,里面有 8 個文件,6 個 .bin文件,一個 readme, 一個 .txt 說明了類別。

然后我們來考慮如下的網絡結構進行 cifar10 的分類:每次輸入一個batch的 64 幅圖像, 轉化成 64*32*32*3 的四維張量,經過步長為 1,卷積核大小為 5*5 ,Feature maps 為64的卷積操作,變為 64*32*32*64 的四維張量,然后經過一個步長為 2 的 max_pool 的池化層,變成 64*16*16*64 大小的四維張量,再經過一次類似的卷積池化操作,變為 64*8*8*64 大小的4維張量,再經過兩個全連接層,映射到 64*192 的二維張量,然后經過一個 sortmax 層,變為 64*10 的張量,最后和標簽 label 做一個交叉熵的損失函數。如下圖所示:

 

 

參考文獻:

1. https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM