kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

這篇文章主要介紹如何利用AlexNet預訓練模型來訓練一個貓狗分類器,主要內容包括:

  • 項目結構介紹
  • 數據探索
  • 數據的準備
  • AlexNet模型的構建
  • 模型的訓練和性能評估
  • 結果的提交

一、項目結構介紹

1、相關數據下載地址

項目地址:https://github.com/steelOneself/kaggle/tree/master/cat_vs_dog/AlexNet

數據下載地址:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data

AlexNet預訓練文件下載地址:http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/

2、項目文件介紹

checkpoints --- 用來保存訓練後生成的模型文件

model --- 用來存放預訓練模型文件

tensorboard ---用來保存訓練過程中的日誌信息

txt --- 用來存放數據集的圖片信息

AlexNet.py --- AlexNet模型結構文件

DataGenrator.py --- 數據生成類

Exploration.py --- 可視化分析

Generate_txt.py --- 將圖片信息保存為txt文件

run.py --- 模型訓練、評估、結構生成

util_data.py --- 數據集工具類,將數據分為訓練集和驗證集

二、數據探索

1、數據介紹

數據包含兩部分,訓練集和測試集,訓練集有25000張圖片,測試集有12500張圖片,在訓練集的圖片名稱中包含了圖片的標籤信息,而測試集的圖片名稱代表的圖片的id,提交結果的時候要求提交圖片的id和預測對應圖片的標籤(1表示dog,0表示cat)。

2、數據探索

分析訓練集中貓狗的分佈情況

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

訓練集中貓狗圖片的分佈情況

三、數據的準備

注意:我將展示出來的代碼進行了省略,由於代碼比較多,比較佔空間,詳細代碼請參考git。

1、生成txt文件

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

將圖片信息轉為txt文件

將圖片信息保存為txt文件,保存格式:圖片id,圖片路徑,圖片標籤

2、將數據分為訓練集和驗證集

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

將數據集分為訓練集和驗證集

將25000張圖片分為訓練集和驗證集,訓練集佔20000張圖片,驗證集佔5000張圖片,分割的時候需要注意,訓練集和驗證集中貓和狗所佔的比例相同。

3、數據生成類

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

數據生成類

利用CPU資源來加載數據,在讀取圖片的時候需要將圖片轉為227×227,因為AlexNet要求輸出圖片的大小是227×227。

四、AlexNet模型構建

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

AlexNet網絡結構

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

AlexNet網絡

五、模型的訓練和性能評估

1、模型的訓練

模型參數設置

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

模型參數設置

train_layers設置需要重新訓練的層數,在這次訓練過程中,只重新訓練AlexNet的最後三層全連接層,其餘的層保持不變。

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

訓練日誌

訓練完成之後,在checkpoints會產生ckpt模型文件,每一個epoch保存一次模型文件,只有當後一個在驗證集上的準確率大於前一個時才會保存模型文件,在保存模型文件的時候後面有附帶該次epoch在驗證集上的準確率。

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

2、模型評估

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

3、查看模型在驗證集上分類正確和分類錯誤的圖片

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

分類正確和錯誤結果展示

上面一行表示分類正確的圖片,下面一行表示分類錯誤的圖片

4、查看驗證集預測結果的分佈情況

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

驗證集結果分佈情況

5、混淆矩陣

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

6、驗證集分類結果報告

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

六、提交結果

kaggle實戰之AlexNet遷移學習訓練貓狗分類器(一)

kaggle的成績計算是利用,是計算預測結果的交叉熵損失值,在生成預測結果的時候,通過fc8輸出的結果還需要經過一個softmax層才能輸出每個類別的概率,直接使用預測類標(0或1)比預測概率的成績會低一些。

總結:本篇文章主要介紹瞭如何使用一個相對簡單的卷積神經網絡AlexNet來構建一個預訓練模型,熟悉一下遷移學習的過程,在下一篇文章將會介紹如何來預訓練一個更復雜的Inception-resent網絡。

最後,給大家推薦一個非常好的學習人工智能相關知識的平臺——微信小程序“八斗問答”,有不懂的問題可以在上面進行免費提問,還有大咖會進行詳細解答,還可以與大咖一對一諮詢。我現在也已經入駐了“八斗問答”,以後的文章在上面也會同步更新,有不懂的地方歡迎來諮詢。


分享到:


相關文章: