默默地學 Deep Learning (6)-透過神經網路進行貓、狗圖像辨識,並視覺化其結果

Source: Deep Learning on Medium


Go to the profile of Mortis Huang
這是我的貓,如果你沒看過,那現在給你看看。

這題目其實是我給學弟們的寒假作業,在此作業當中又可以分為以下幾個細項:

  1. 找到、整理貓狗各自5000張圖片以上的資料集,並將其整理成可以輸入進神經網路之型態。
  2. 以至少三種 (Layer的結構) 的神經網路模型進行辨識,並比較其之間的差異(可以以表格呈現)。
  3. 證明訓練完的模型是透過圖像中的動物特徵來進行辨識,不是辨識到背景雜訊。
  4. 抽取分類層上一層 (通常為Dense Layer) 進行t-sne降維,並將結果可視化。

那以下我就依照上述分項,來詳細的解釋具體該如何操作吧,有些會跟前面幾篇文章稍微重複到,不過依照這篇的方式來寫應該會比較好啦,畢竟也隔了超過半年以上的時間。程式碼一樣會提供出來,但有時若有些疏漏、錯誤,再煩請讀者不吝指出、提醒。


  1. 找到、整理貓狗各自5000張圖片以上的資料集,並將其整理成可以輸入進神經網路之型態。

這個其實在第三篇的第五步裡面已經有提到過,我們可以下載由微軟所提供的貓狗影像資料集,大小為 787 MB,記得要先註冊一下:

下載下來之後,會得到一個資料夾叫做「PetImages」,裡面又有兩個子資料夾裝著貓、狗各自一萬多張的照片。在這邊,可以簡單的瀏覽一下這些照片們,總是要知道自己抓下來的到底是什麼東西,尤其是這種網路上找來的免費資料庫,其質量必定不會太高。簡單的看一下,就會發現有一些垃圾圖片或是根本沒有內容的檔案 (檔案大小 0KB) ,那這些可以選擇手動挑除,或是透過程式撰寫來自動的篩選內容。

自動找尋特定檔案

<script src=”https://gist.github.com/MortisHuang/10868f3cd7deab257f8ffc8dba3919e8.js“></script>

上述程式碼當中,os.walk會把該函數得到之位置底下所有資料夾都打開找過一次,所以算是一個很便利的功能,不管你的資料夾有幾層,都可以找的到。