天天看點

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

項目介紹

小狗分類器可以做什麼?

通過這個分類器,你隻需要上傳照片,就可以得到小狗的品種,以及更多的資訊。

這就是所謂的「機器學習」,讓機器自己去“學習”。我們今天要做的這個分類任務,是一個“監督學習”的過程。

監督學習的主要目标是從有标簽的訓練資料中學習模型,以便對未知或未來的資料做出預測。

我給大家講一個例子。

用“房子的尺寸”預測“房子的價格”

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

圖檔來自(吳恩達-機器學習)

X-房子的尺寸(小狗的圖檔)
Y-房子的價格(小狗的類别)
           

如圖,我們根據已經有的資料集(圖上的坐标),可以拟合出一條近似符合規律的直線。

這樣,再有新的房子尺寸(1250),我們就可以估算出房子的價格(220k)了。

有了這些簡單的基礎,可以開始搞了。

效果展示

訓練集的準确率為0.925,但測試集隻有0.7

說明過拟合了,可以再增加一些圖檔,或者使用資料增強,來減少過拟合。

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

測試了兩張圖檔,全都識别對了!

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

編寫思路

整個分類器的實作,可以分為以下幾個部分:

1 準備資料集

我們可以通過爬蟲技術,把4類圖像(京巴、拉布拉多、柯基、泰迪)儲存到本地。總共有840張圖檔做訓練集,188張圖檔做測試集。

資料集的準備,可以參考上一篇文章。

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

點選上圖,閱讀原文

2 資料集的預處理

1) 統一尺寸為1001003(RGB彩色圖像)

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

2) 由于資料是自己下載下傳的,需要制作标簽(label),可提取圖像名稱的第一個數字作為類别。(重命名圖檔)

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

3)劃分資料集

840張圖檔做訓練集,188張圖檔做測試集。

4)把圖檔轉換為網絡需要的類型

隻放了訓練集的代碼,測試集一樣操作。

ima_train = os.listdir('./train')

圖檔其實就是一個矩陣(每一個像素都是0-255之間的數)(1001003)

1.把圖檔轉換為矩陣

def read_train_image(filename):

img = Image.open('./train/' + filename).convert('RGB')
return np.array(img)
           

x_train = []

2.把所有的圖檔矩陣放在一個清單裡 (840, 100, 100, 3)

for i in ima_train:

x_train.append(read_train_image(i))           

x_train = np.array(x_train)

3.提取kind類别作為标簽

y_train = []

for filename in ima_train:

y_train.append(int(filename.split('_')[0]))
           

标簽(0/1/2/3)(840,)

y_train = np.array(y_train)

我是因為重命名圖檔為(1/2/3/4),是以都減了1

為了能夠轉化為獨熱矩陣

y_train = y_train - 1

4.把标簽轉換為獨熱矩陣

将類别資訊轉換為獨熱碼的形式(獨熱碼有利于神經網絡的訓練)

y_train = np_utils.to_categorical(y_train)

y_test = np_utils.to_categorical(y_test)

print(y_test)

x_train = x_train.astype('float32')

x_test = x_test.astype('float32')

x_train /= 255

x_test /= 255

print(x_train.shape) # (840, 100, 100, 3)

print(y_train.shape) # (840,)

3 搭建卷積神經網絡

Keras是基于TensorFlow的深度學習庫,是由純Python編寫而成的高層神經網絡API,也僅支援Python開發。

它是為了支援快速實踐而對Tensorflow的再次封裝,讓我們可以不用關注過多的底層細節,能夠把想法快速轉換為結果。

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

4 訓練

訓練的過程,就是最優解的過程。

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

對上圖來說,就是根據資料集,不斷的疊代,找到一條最近似的直線(y = kx + b),把參數k,b儲存下來,預測的時候直接加載。

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

5 預測

此時k、b(參數)和x(小狗的圖像)都是已知的了,求k(類别)就完了。

小狗分類器,你家的狗子是個什麼狗?項目介紹效果展示編寫思路

作者:GitPython

來源:微信公衆号 小詹學Python