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

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

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

訓練分類器網絡

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

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

而後,使用DataLoader批量傳遞圖像,因爲有三個數據集:訓練數據集、驗證數據集和測試數據集,所以須要爲每一個數據集建立一個加載器。一切準備就緒後,就能夠訓練分類器了。測試

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

讓模型識別一個已經知道的圖像,這不算啥事,可是咱們如今的要求是:可以歸納、肯定之前從未見過的圖像中花的類型。在實現這一目標過程當中,咱們必定要避免過擬合,即「分析的結果與特定數據集的聯繫過於緊密或徹底對應,所以可能沒法對其餘數據集進行可靠的預測或分析」。code

隱藏層htm

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

咱們很容易陷入這樣一種誤區:擁有更多或更大的隱藏層,可以提升分類器的正確率,但事實並不是如此。

增長隱藏層的數量或大小之後,咱們的分類器就須要考慮更多沒必要要的參數。舉個例子來講,將噪音看作是花朵的一部分,這會致使過擬合,也會下降精度,不只如此,分類器還須要更長的時間來訓練和預測。

所以,我建議你從數量較少的隱藏層開始,而後根據須要增長隱藏層的數量或大小,而不是一開始就使用特別多或特別大的隱藏層。

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

數據加強

咱們有不少圖像可供模型訓練,這很是不錯。若是擁有更多的圖像,數據加強就能夠發揮做用了。每一個圖像在每一個訓練週期都會做爲神經網絡的輸入,對神經網絡訓練一次。在這以前,咱們能夠對輸入圖像作一些隨機變化,好比旋轉、平移或縮放。這樣,在每一個訓練週期內,輸入圖像都會有差別。

增長訓練數據的種類有利於減小過擬合,一樣也提升了分類器的歸納能力,從而提升模型分類的總體準確度。

Shuffle

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

舉個例子來講,咱們剛開始訓練分類器時,咱們使用「牽牛花」圖像對模型進行訓練,這樣一來,分類器在後續訓練過程當中將會偏向「牽牛花」,由於它只知道「牽牛花」。所以,在咱們使用其餘類型的花進行訓練時,分類器最初的偏好也將持續一段時間。

爲了不這一現象,咱們就須要在數據加載器中使用不一樣的圖像,這很簡單,只須要在加載器中添加shuffle=true,代碼以下:

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

Dropout

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

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

d58b752abc143f91738056fc1f6fc8cfbc312c85

Dropout圖

除了過擬合,咱們必定要記住,學習率( learning rate )是最關鍵的超參數。若是學習率過大,模型的偏差永遠都不會降到最小;若是學習率太小,分類器將會訓練的特別慢,所以,學習率不能過大也不能太小。通常來講,學習率能夠是0.01,0.001,0.0001……,依此類推。

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

結論

理解模型的訓練過程,將有助於建立可以歸納的模型,在預測新圖像類型時的準確度更高。

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

如今,咱們已經知道應該如何訓練分類器,那麼,咱們就能夠用它來預測之前從未見過的花型了!

原文連接

相關文章
相關標籤/搜索