天天看點

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

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

經過了幾個月的學習和實踐,我完成了優達學城網站上《

Python

Programming with Python Nanodegree

》課程的學習,該課程的終極項目就是使用Pytorch為

102種不同類型的花

建立一個圖像分類器。

在完成這個項目的過程中,我和其他學員一樣,都碰到了各種問題和挑戰,是以寫下了這篇文章。希望你讀完這篇文章以後,會對你的機器學習有所裨益。

本文介紹了如何實作圖像分類的基礎概念,即了解圖像内容的算法。本文并不會詳細分步說明構模組化型的具體步驟,而是從宏觀上介紹整個過程,如果你正在學習機器學習或人工智能,相信這篇文章将會對你很有幫助。

在第一部分中,我們将介紹加載預訓練的神經網絡,為什麼要“重用”網絡(即使用預訓練神經網絡),指明哪些部分可以重用,哪些部分不可以重用,以及如何自定義預訓練網絡。

加載一個預訓練網絡

“重用”是一個非常合理的政策,特别是當某些工具是大家都認可為标準的時候,“重用”更顯得尤為重要。在這個例子中,我們的出發點是

torchvision提供的一個模型架構

現在,我們要做的是加載一個預先訓練好的網絡,并用自己的網絡替換它的分類器,然後,我們就可以訓練自己的分類器了。

雖然這個想法很合理,但是也比較麻煩,因為加載一個預先訓練好的網絡,并不會節省我們訓練分類器的工作量。

是以,使用預訓練網絡到底有什麼好處呢?

當我們人類在看圖像的時候,我們會識别線條和形狀,鑒于此,我們才可以将圖像内容與之前看到的内容聯系起來。現在,我們希望分類器也能做到這點,但是,圖像并不是一個簡單的資料,而是由數千個獨立的像素組成,每個像素又由3個不同的值組合起來,形成顔色,即紅色、綠色和藍色。

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

從左到右,依次為:原始圖像,紅色,綠色,藍色。

如果我們希望分類器能夠處理這些資料,我們要做的就是将每個待處理圖像所包含的資訊,以分類器可以了解的格式傳給分類器,這就是預訓練網絡發揮作用的地方。

這些預訓練網絡主要由一組特征檢測器和分類器組成,其中,

特征檢測器被訓練成可以從每個圖像中提取資訊

,分類器被訓練成了解特征層提供的輸入。

在這裡,特征檢測器已經在ImageNet中接受過訓練,并且性能良好,我們希望這點能夠繼續保持。在訓練分類器時,為了防止特征層被篡改,我們得對特征層進行“當機”,下面這些代碼可以很輕松的解決這一問題:

for param in model.parameters():
    param.requires_grad = False
           

那麼,問題又來了,既然我們可以“重用”特征檢測器,我們為什麼不能“重用”分類器?要回答這個問題,我們先來看看VGG16架構的預設分類器:

(classifier): Sequential(
  (0): Linear(in_features=25088, out_features=4096, bias=True)
  (1): ReLU(inplace)
  (2): Dropout(p=0.5)
  (3): Linear(in_features=4096, out_features=4096, bias=True)
  (4): ReLU(inplace)
  (5): Dropout(p=0.5)
  (6): Linear(in_features=4096, out_features=1000, bias=True)
)

           

首先,我們沒辦法保證這些代碼能夠起作用,在我們特定的環境中,這些預設層、元素、激活函數以及Dropout值并不一定是最佳的。

尤其是最後一層的輸出是1000個元素,這就容易了解了。在我們的例子中,我們要對102種不同類型的花進行分類,是以,

我們的分類器輸出必須是 102 ,而不是 1000

從上面VGG16架構的預設分類器中,我們還可以注意到,分類器的輸入層有25088個元素,這是特定預訓練模型中特征檢測器的輸出大小,

是以,我們的分類器大小也必須要與要特征層的輸出相比對 結論

從上面的分析,本文能夠得到以下結論:

1.預先訓練好的網絡非常有用。使用預訓練模型,可以讓我們更加專注于我們自己用例的具體細節,還可以重用衆所周知的工具,對用例中的圖像進行預處理。

2.分類器的輸出大小必須與我們希望識别的圖像數量相同。

3.特征層的輸出和自定義分類器的輸入大小必須相比對。

在下一篇文章中,我們将深入探讨,在訓練分類器過程中,如何避免一些常見的陷阱,并學習如何調整超參數,來提高模型的準确性。

本文由北郵

@愛可可-愛生活

 老師推薦,

阿裡雲雲栖社群

組織翻譯。

文章原标題《Implementing an Image Classifier with PyTorch》

譯者:Mags,審校:袁虎。

文章為簡譯,更為詳細的内容,請檢視

原文

繼續閱讀