手把手教你用PyTorch實現圖像分類器(第一部分)

2020-12-07 雷鋒網


本文為 AI 研習社編譯的技術博客,原標題 :

Implementing an Image Classifier with PyTorch: Part 1

作者 | Jose Nieto

翻譯 | 醬番梨、Succi         

校對 | 醬番梨        審核 | 醬番梨       整理 | 立魚王

原文連結:

https://medium.com/udacity/implementing-an-image-classifier-with-pytorch-part-1-cf5444b8e9c9


經過幾個月富有挑戰性但是受益良多的學習,我最近從Udacity的Python Nanodegree program AI編程專業畢業。最後一個項目是用PyTorch創建一個102種不同類型的花的圖像分類器。

在做這個final project的時候,很多同學都遇到了類似的問題和挑戰。當我接近完成的時候,我決定與大家分享一些在未來對他人有益的建議和見解。

通過3篇短文,介紹如何實現圖像分類器的概念基礎——這是一種能夠理解圖像內容的算法。

本文的目標不是提供手把手的指導,而是幫助理解整個過程。如果你正在考慮學習機器學習或人工智慧,你將不得不做類似的項目,並理解本系列文章中介紹的概念。

文章主要進行概念上的解釋,不需要知道如何編寫代碼。此外,下面所包含的PyTorch細節是次要的,主要以PyTorch作為示例。

這個過程的第一步是加載一個pre-trained神經網絡。在討論這一步時,我將解釋為什麼要「reuse」網絡(即使用「pre-trained」網絡),闡明哪些部分可以重用,哪些部分不能重用,並提供如何根據需要定製pre-trained網絡的指導。


   加載預訓練的網絡

reuse是一種十分合理的策略,尤其是眾所周知並且得到廣泛認可的標準。在示例中,出發點是torchvision提供的一種模型結構。

本文的目標是加載其中的一個pre-trained網絡,並且將其中的分類器替換為自己的分類器,從而可以訓練自己的分類器。

雖然這個想法是合理的,但我發現它也會產生一些問題,因為加載一個預先訓練的網絡並不能節省訓練分類器的時間。

「所以你可能會想,使用預訓練網絡有什麼意義?」

當我們人類看到圖像時,可以識別線條和形狀。正因為如此,我們才能將圖像內容與之前看到過的內容聯繫起來。我們希望我們的分類器能夠做一些類似的事情,但是圖像不是一段微不足道的數據。圖像通常由數千個獨立的像素組成,每個像素都有一種顏色,這種顏色由三個不同的值組合定義 : Red,Green, Blue。

從左到右:原始,紅色,綠色,藍色 

如果我們希望我們的分類器能夠處理該數據量,我們將需要處理每個圖像中包含的所有信息,並以其可以理解的格式將其提供給分類器。這就是預訓練網絡發揮作用的地方。  

這些預先訓練的網絡主要由一組特徵檢測器和分類器組成,其中特徵檢測器被訓練以從每個圖像中提取信息,並且訓練分類器以理解特徵層提供的輸入。

我們已經在已在ImageNet上培訓過功能檢測器,並且證明它可以有很好的表現。因此,我們希望保持原樣。為了防止在我們訓練分類器時,要素圖層被修改,我們需要「凍結」它們。這個小代碼片段可以幫助解決這個問題:  

如果使用分類器會怎麼樣? 為什麼我們不能重複使用它?   要回答這個問題,讓我們以架構VGG16為例,來看看它的默認分類器:  

首先,我們無法保證這一定是有效的。並且令人懷疑的是,這些默認層和元素,激活函數和丟失值對於我們的特定情況而言恰好是最佳的。  

當我們看到它的最後一層有1000個元素的輸出時,情況就變得很明顯了。在我們的例子中,我們處理102種不同類型的花,因此我們的分類器的輸出必須是102 。

從上面VGG16中的默認分類器,我們還可以注意到它的輸入層有25088個元素,因為這是此特定預訓練模型中特徵檢測器的輸出大小。我們的分類器的輸入大小也必須與要素圖層的輸出相匹配。 


   結論

由上文我們可以得知,預先訓練好的網絡非常有益,因為它們使我們能夠專注於我們的用例細節,同時重複使用眾所周知的泛型來進行示例中的圖像預處理。

我們還了解到,分類器輸出的大小必須與我們希望能夠識別的不同類型的數量相同。

最後,我們已經看到要素圖層的輸出和自定義分類器的輸入也必須匹配大小。

在我的下一篇文章中,我們將探討如何避免在分類器訓練過程中常見的陷阱,並學習如何調整超參數以提高模塊的準確性。

我的文章對你有用嗎?期待你的評論!

想要繼續查看該篇文章相關連結和參考文獻?雷鋒網雷鋒網(公眾號:雷鋒網)雷鋒網

點擊手把手教你用PyTorch實現圖像分類器(第一部分)】即可訪問:

https://ai.yanxishe.com/page/TextTranslation/1353

AI入門、大數據、機器學習免費教程

35本世界頂級原本教程限時開放,這類書單由知名數據科學網站 KDnuggets 的副主編,同時也是資深的數據科學家、深度學習技術愛好者的Matthew Mayo推薦,他在機器學習和數據科學領域具有豐富的科研和從業經驗。

點擊連結即可獲取:https://ai.yanxishe.com/page/resourceDetail/417


雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 如何用PyTorch訓練圖像分類器
    -99465a1e9bf5如果你剛剛開始使用PyTorch並想學習如何進行基本的圖像分類,那麼你可以參考本教程。這可能超出了我的意識或你的理解,但看到那些深層隱藏層內的東西仍然很有趣。這取決於你選擇什麼樣的模型,根據你的特定數據集模型可能會不同。這裡列出了所有的PyTorch模型。現在我們進入深度神經網絡的有趣部分。首先,我們必須凍結預訓練過的層,因此在訓練期間它們不會進行反向傳播。然後,我們重新定義最後的全連接層,即使用我們的圖像來訓練的圖層。
  • 雲計算學習:用PyTorch實現一個簡單的分類器
    所以我總結了一下自己當初學習的路線,準備繼續深入鞏固自己的 pytorch 基礎;另一方面,也想從頭整理一個教程,從沒有接觸過 pytorch 開始,到完成一些最新論文裡面的工作。以自己的學習筆記整理為主線,大家可以針對參考。第一篇筆記,我們先完成一個簡單的分類器。
  • 手把手教你用TensorFlow搭建圖像識別系統(三)|...
    關於前兩部分,可以參看《機器學習零基礎?手把手教你用TensorFlow搭建圖像識別系統》(一)和(二)。如果你已經通過我以前的博客文章,你會看到神經網絡分類器的代碼非常類似於softmax分類器的代碼。 除了切換出定義模型的代碼部分之外,我還添加了一些小功能使TensorFlow可以做以下一些事情:正則化:這是一種非常常見的技術,用於防止模型過擬合。
  • 手把手教你用Keras進行多標籤分類(附代碼)
    基於Keras的多標籤分類問題本文將分為4個部分。 在第一部分,我將討論我們的多標籤分類數據集(以及如何快速構建屬於你自己的數據集)。如果你在你自己的數據集上訓練,你便需要查看這張圖片以獲得正確率/風險函數損失及過擬合情況。classify.py:為了測試我們的分類器,我寫了classify.py。在你將模型部署於其他地方(如一個iphone的深度學習app或是樹莓派深度學習項目)之前,你應該始終在本地測試你的分類器。
  • 手把手教你用TensorFlow搭建圖像識別系統(一)|...
    示例代碼是使用Python寫的,如果你有Python的基礎知識是最好的。但如果你只是掌握其他的程式語言,那也已經足夠了。由於篇幅限制,本系列將分四篇文章發布,雷鋒網編譯,未經許可不得轉載。為什麼讓機器學會圖像識別?圖像識別是開發和測試機器學習的一項重要任務,因為視覺可能是最重要的一項感知能力。雖然對於人類來說,它是與生俱來的。但
  • 輕鬆學Pytorch-使用ResNet50實現圖像分類
    Hello大家好,這篇文章給大家詳細介紹一下pytorch中最重要的組件torchvision,它包含了常見的數據集、模型架構與預訓練模型權重文件、常見圖像變換、計算機視覺任務訓練。可以是說是pytorch中非常有用的模型遷移學習神器。本文將會介紹如何使用torchvison的預訓練模型ResNet50實現圖像分類。
  • 手把手教你用 Keras 實現 LSTM 預測英語單詞發音
    原標題:手把手教你用 Keras 實現 LSTM 預測英語單詞發音 雷鋒網按:本文為 AI 研習社編譯的技術博客,原標題 Predicting English Pronunciations,作者 Ryan Epp。
  • 《逃離方塊磨坊》第八部分攻略 手把手教你風車第八部分怎麼過
    《逃離方塊磨坊》第八部分攻略 手把手教你風車第八部分怎麼過時間:2021-01-11 20:35   來源:遊俠網   責任編輯:沫朵 川北在線核心提示:原標題:《逃離方塊磨坊》第八部分攻略 手把手教你風車第八部分怎麼過 《逃離方塊:磨坊》第八部分怎麼通關?
  • 二分類、多分類、回歸任務,一個項目get競賽必備模型
    機器之心報導機器之心編輯部數據挖掘類比賽必備模型,四種實現方法,你值得擁有。數據科學競賽是學習各類算法、深入理解數據科學、提升和挑戰自己的絕佳機會,而這些競賽中有一些常用的模型。實現、xgboost 實現、keras 實現和 pytorch 實現:lightgbmbinary_class.py :lightgbm 實現的二分類multi_class.py :lightgbm 實現的多分類regression.py :lightgbm 實現的回歸multi_class_custom_feval.py
  • 手把手教你NumPy來實現Word2vec
    這便於反向傳播誤差的計算,這部分將在後文討論。在實際的訓練中,你應該隨機初始化這些權重(比如使用np.random.uniform())。想要這麼做,把第九第十行注釋掉,把11和12行取消注釋就好。注意,損失函數包括兩個部分。第一部分是輸出層(在softmax之前)中所有元素的和的負數。第二部分是上下文單詞的數量乘以在輸出層中所有元素(在 exp之後)之和的對數。
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    然後,我們將使用MNIST手寫數字分類數據集,並在PyTorch和TensorFlow中使用CNN(卷積神經網絡)建立圖像分類模型。這將是你的起點,然後你可以選擇自己喜歡的任何框架,也可以開始構建其他計算機視覺模型。
  • 教你用PyTorch實現「看圖說話」(附代碼、學習資源)
    這將會幫助你更深刻地掌握各個主題,成為一名更好的DeepLearning實踐者。這篇文章將和大家一起看一個有趣的多模態主題,我們將結合圖像和文本處理技術來構建一個有用的深度學習應用,即看圖說話(ImageCaptioning)。看圖說話是指從一個圖像中基於其中的對象和動作生成文本描述的過程。例如:
  • 福利,PyTorch中文版官方教程來了
    教程作者來自 pytorchchina.com。教程網站:http://pytorch123.com教程裡有什麼教程根據 PyTorch 官方版本目錄,完整地還原了所有的內容。包括簡單的環境搭建、快速入門相關 API、高級操作、圖像處理實戰、文本處理實戰、GAN 和強化學習等,基本涵蓋了目前所有深度學習相關的知識點。教程的一部分內容,使用 torch.view 改變 tensor 的大小或形狀用教程設計一個聊天機器人,以上為部分對話。
  • Deep CARs:使用Pytorch學習框架實現遷移學習
    想用手機拍任何一輛車就能知道車的牌子嗎?本文將介紹一個能識別196種類型汽車的模型。本模型將通過神經網絡來實現目標。更準確地說,是使用一個深度神經網絡,因此得名Deep CARs(深度計算機自動額定值系統)。想要實現這一目標,需要完成兩部分的學習,第1部分:構建汽車分類器;第2部分:部署分類器。本文將著重論述第1部分內容。
  • PyTorch官方出品了一本深度學習書,免費提供給開發者
    根據出版商Manning出版社的介紹,這本書的核心,是教你如何使用Python 和 PyTorch 實現深度學習算法。所以出版商介紹稱,想要更好的消化這本書,需要對Python知識和基本線性代數有了解,對深度學習有一些理解更好,但並不需要你具備使用PyTorch或其他深度學習框架的經驗。
  • PyTorch實現,GitHub4000星:微軟開源的CV庫
    近年來,計算機視覺領域突飛猛進,在人臉識別、圖像理解、搜索、無人機、地圖、半自動和自動駕駛方面得到廣泛應用。而這些應用的核心部分是視覺識別任務,如圖像分類、目標檢測和圖像相似度。在各種計算機視覺模型和應用層出不窮的當下,如何把握髮展脈絡,跟進領域前沿發展呢?微軟創建了一個庫,提供構建計算機視覺系統的大量示例和最佳實踐指導原則。
  • 幾行代碼教你在Pytorch和Python中實現神經風格遷移
    從左到右為:內容圖像、風格圖像、生成的圖像這個方法相當直觀,本文是在pytorch和python中實現神經風格遷移的簡單指南,並預先解釋了這個方法。內容是圖像組成的高級表徵。圖像風格涉及更複雜的細節:筆觸、顏色對比、整體紋理等等……假設圖像的內容是一隻狗,不同人畫這個「內容」的方式不一樣,也就是說狗的模樣會不盡相同。這種差異形成了圖像風格。你的筆畫可能會更粗更有活力,而我的筆畫可能會更細更鈍。這些定義有助於理解目的,但實際上,實現該算法需要更精確的定義。
  • 獨家 | 教你使用torchlayers 來構建PyTorch 模型(附連結)
    我喜歡這個圖像和文本分類二合一的例子(見下面連結)!tl.Conv(256, kernel_size=11),  # "same" padding as default      tl.GlobalMaxPool(),            # Known from Keras      tl.Linear(10),                 # Output for 10 classes  )  當指定輸入形狀後(對於上面定義好的模型,圖像和文本分類的輸入形狀如下所示
  • 《PyTorch中文手冊》來了
    PyTorch 是一個深度學習框架,旨在實現簡單靈活的實驗。自 2017 年初首次推出,PyTorch 很快成為 AI 研究人員的熱門選擇並受到推崇。目錄第一章: pytorch 入門1. Pytorch 簡介2.
  • 手把手教你在TF2.0中實現CycleGAN,推特上百贊
    銅靈 發自 凹非寺量子位 出品| 公眾號 QbitAICycleGAN,一個可以將一張圖像的特徵遷移到另一張圖像的酷算法,此前可以完成馬變斑馬、冬天變夏天、蘋果變桔子等一顆賽艇的效果。這行被頂會ICCV收錄的研究自提出後,就為圖形學等領域的技術人員所用,甚至還成為不少藝術家用來創作的工具。也是目前大火的「換臉」技術的老前輩了。