這篇文章主要介紹如何利用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、數據探索
分析訓練集中貓狗的分佈情況
三、數據的準備
注意:我將展示出來的代碼進行了省略,由於代碼比較多,比較佔空間,詳細代碼請參考git。
1、生成txt文件
將圖片信息保存為txt文件,保存格式:圖片id,圖片路徑,圖片標籤
2、將數據分為訓練集和驗證集
將25000張圖片分為訓練集和驗證集,訓練集佔20000張圖片,驗證集佔5000張圖片,分割的時候需要注意,訓練集和驗證集中貓和狗所佔的比例相同。
3、數據生成類
利用CPU資源來加載數據,在讀取圖片的時候需要將圖片轉為227×227,因為AlexNet要求輸出圖片的大小是227×227。
四、AlexNet模型構建
五、模型的訓練和性能評估
1、模型的訓練
模型參數設置
train_layers設置需要重新訓練的層數,在這次訓練過程中,只重新訓練AlexNet的最後三層全連接層,其餘的層保持不變。
訓練完成之後,在checkpoints會產生ckpt模型文件,每一個epoch保存一次模型文件,只有當後一個在驗證集上的準確率大於前一個時才會保存模型文件,在保存模型文件的時候後面有附帶該次epoch在驗證集上的準確率。
2、模型評估
3、查看模型在驗證集上分類正確和分類錯誤的圖片
上面一行表示分類正確的圖片,下面一行表示分類錯誤的圖片
4、查看驗證集預測結果的分佈情況
5、混淆矩陣
6、驗證集分類結果報告
六、提交結果
kaggle的成績計算是利用,是計算預測結果的交叉熵損失值,在生成預測結果的時候,通過fc8輸出的結果還需要經過一個softmax層才能輸出每個類別的概率,直接使用預測類標(0或1)比預測概率的成績會低一些。
總結:本篇文章主要介紹瞭如何使用一個相對簡單的卷積神經網絡AlexNet來構建一個預訓練模型,熟悉一下遷移學習的過程,在下一篇文章將會介紹如何來預訓練一個更復雜的Inception-resent網絡。
最後,給大家推薦一個非常好的學習人工智能相關知識的平臺——微信小程序“八斗問答”,有不懂的問題可以在上面進行免費提問,還有大咖會進行詳細解答,還可以與大咖一對一諮詢。我現在也已經入駐了“八斗問答”,以後的文章在上面也會同步更新,有不懂的地方歡迎來諮詢。
閱讀更多 機器學習之路 的文章