用PyTorch創建一個圖像分類器?So easy!(Part 2)

摘要: 學習完了如何加載預訓練神經網絡,下面就讓我們來看看如何訓練分類器吧!

第一部分中,我們知道了爲什麼以及如何加載預先訓練好的神經網絡,我們可以用自己的分類器代替已有神經網絡的分類器。那麼,在這篇文章中,我們將學習如何訓練分類器。

訓練分類器

首先,我們需要爲分類器提供待分類的圖像。本文使用ImageFolder加載圖像,預訓練神經網絡的輸入有特定的格式,因此,我們需要用一些變換來調整圖像的大小,即在將圖像輸入到神經網絡之前,對其進行裁剪和標準化處理。

具體來說,將圖像大小調整爲224*224,並對圖像進行標準化處理,即均值爲 [0.485,0.456,0.406],標準差爲[0.229,0.224,0.225],顏色管道的均值設爲0,標準差縮放爲1。

然後,使用DataLoader批量傳遞圖像,由於有三個數據集:訓練數據集、驗證數據集和測試數據集,因此需要爲每個數據集創建一個加載器。一切準備就緒後,就可以訓練分類器了。

在這裏,最重要的挑戰就是——正確率(accuracy)。

讓模型識別一個已經知道的圖像,這不算啥事,但是我們現在的要求是:能夠概括、確定以前從未見過的圖像中花的類型。在實現這一目標過程中,我們一定要避免過擬合,即“分析的結果與特定數據集的聯繫過於緊密或完全對應,因此可能無法對其他數據集進行可靠的預測或分析”。

隱藏層

實現適當擬合的方法有很多種,其中一種很簡單的方法就是:隱藏層

我們很容易陷入這樣一種誤區:擁有更多或更大的隱藏層,能夠提高分類器的正確率,但事實並非如此。

增加隱藏層的數量或大小以後,我們的分類器就需要考慮更多不必要的參數。舉個例子來說,將噪音看做是花朵的一部分,這會導致過擬合,也會降低精度,不僅如此,分類器還需要更長的時間來訓練和預測。

因此,我建議你從數量較少的隱藏層開始,然後根據需要增加隱藏層的數量或大小,而不是一開始就使用特別多或特別大的隱藏層。

在第一部分介紹的《AI Programming with Python Nanodegree》課程中的花卉分類器項目中,我只需要一個小的隱藏層,在第一個完整訓練週期內,就得到了70%以上的正確率。

數據增強

我們有很多圖像可供模型訓練,這非常不錯。如果擁有更多的圖像,數據增強就可以發揮作用了。每個圖像在每個訓練週期都會作爲神經網絡的輸入,對神經網絡訓練一次。在這之前,我們可以對輸入圖像做一些隨機變化,比如旋轉、平移或縮放。這樣,在每個訓練週期內,輸入圖像都會有差異。

增加訓練數據的種類有利於減少過擬合,同樣也提高了分類器的概括能力,從而提高模型分類的整體準確度。

Shuffle

在訓練分類器時,我們需要提供一系列隨機的圖像,以免引入任何誤差。

舉個例子來說,我們剛開始訓練分類器時,我們使用“牽牛花”圖像對模型進行訓練,這樣一來,分類器在後續訓練過程中將會偏向“牽牛花”,因爲它只知道“牽牛花”。因此,在我們使用其他類型的花進行訓練時,分類器最初的偏好也將持續一段時間。

爲了避免這一現象,我們就需要在數據加載器中使用不同的圖像,這很簡單,只需要在加載器中添加shuffle=true,代碼如下:

trainloader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)

Dropout

有的時候,分類器中的節點可能會導致其他節點不能進行適當的訓練,此外,節點可能會產生共同依賴,這就會導致過擬合。

Dropout技術通過在每個訓練步驟中使一些節點處於不活躍狀態,來避免這一問題。這樣一來,在每個訓練階段都使用不同的節點子集,從而減少過擬合。

Dropout圖

除了過擬合,我們一定要記住,學習率( learning rate )是最關鍵的超參數。如果學習率過大,模型的誤差永遠都不會降到最小;如果學習率過小,分類器將會訓練的特別慢,因此,學習率不能過大也不能過小。一般來說,學習率可以是0.01,0.001,0.0001……,依此類推。

最後,在最後一層選擇正確的激活函數會對模型的正確率會產生特別大的影響。舉個例子來說,如果我們使用 negative log likelihood loss(NLLLoss),那麼,在最後一層中,建議使用LogSoftmax激活函數。

結論

理解模型的訓練過程,將有助於創建能夠概括的模型,在預測新圖像類型時的準確度更高。

在本文中,我們討論了過擬合將會如何降低模型的概括能力,並學習了降低過擬合的方法。另外,我們也強調了學習率的重要性及其常用值。最後,我們知道,爲最後一層選擇正確的激活函數非常關鍵。

現在,我們已經知道應該如何訓練分類器,那麼,我們就可以用它來預測以前從未見過的花型了!



本文作者:【方向】

閱讀原文

本文爲雲棲社區原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章