本周主要構件了一個卷積神經網絡的模型,主要用以識別對應圖片的種類,並且能夠對圖片進行預測
以下就是實現從網上爬取圖片之后並識別毫不相干的從百度上查找的貓和狗圖片的種類
首先從網上爬取一些圖片到本地的文件夾當中,並對圖片進行對應標簽的標記。
我在網上選取了一些貓和狗的圖片,
對爬取的圖片進行標記,貓的圖片標記A,狗的圖片標記B
將對應圖片的名稱標記到其總類上,爬取的狗的圖片網站是:
https://www.ivsky.com/tupian/gou_t116/index_2.html 中的頁面
其貓的圖片爬取的是對應上述頁面中的貓種類的圖片,
兩種種類的圖片合起來共計
152張圖片+一個label標簽集合
爬取的代碼如下:(部分代碼未放出,html是我單獨寫的一個模塊)
構建訓練模型,將圖片統一縮放成40*40的大小,並獲取對應圖片的標簽之后,構建一個識別只有一個特征,2個種類的寬度為40,高度為40的卷積神經網絡模型,對應的第一個卷積層輸出通道大小為32,第二個卷積層輸出通道大小為64(代碼中未給出)
用的優化器是亞當優化器,該優化器回溯比較快
對其進行250次學習率為0.001的模型訓練並將模型保存為picture/recognize
訓練過程:
進行250次識別之后,可以看到對應圖片的識別效果擬合的不錯,實際上識別的效果還得用實際的圖片來檢驗一下
在模型訓練好之后,要檢驗是被模型的准確率,就要找幾張毫不相干的貓和狗的圖片來測試一下。
我直接在百度上通過搜索貓和狗分別得到以下的幾張圖
隨機抓取幾個幸運的小朋友之后,得到以下的幾張圖片:
我們選取了5張圖片,其中在訓練的時候,我將貓的種類設置為A,狗的種類設置為B,然后對應圖片的預測結果如下。
我們猜想的結果是:
u=231....對應A小狗
u=126....對應B小貓
u=141...對應B小貓
u=192...對應A小狗
u=327...對應A小狗
然后在代碼中讀取剛剛訓練好的卷積神經網絡的模型,對這些圖片首先進行統一縮放成40*40大小之后,將其代入卷積神經網絡模型中進行判斷其類別:(預測時用的函數為softmax,該函數在識別單分類圖片具有比sigmoid函數更好的分類能力,反之則用sigmoid有較好的效果)
可以看到除了
這張圖片以后,其他圖片均能正確識別。
這張狗的圖片確實從肉眼上看起來有點像貓,可能是訓練集中沒有對應該類犬的形狀的圖片導致的,畢竟僅僅只有152個訓練集同時還是兩個種類的。
5張圖片的識別正確率在80%左右,(未經過參數調優的結果)