1. 程式人生 > >用PyTorch建立一個影象分類器?So easy!(Part 2)

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

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

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

結論

理解模型的訓練過程,將有助於建立能夠概括的模型,在預測新影象型別時的準確度更高。

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

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

 

原文連結
本文為雲棲社群原創內容,未經允許不得轉載。