深度學習入門教程:分類貓和狗

2021-01-16 人工智慧遇見磐創

本文將一步步建立和訓練一個深度學習模型,以達到分類貓和狗的目的。閱讀者只要有一些高中數學基礎和python編程經驗就足夠了!

1.安裝程序

為了簡單起見,我們將在雲GPU(什麼是GPU)上運行模型。可以通過以下連結了解GPU在深度學習中的重要性:https://towardsdatascience.com/what-is-a-gpu-and-do-you-need-one-in-deep-learning-718b9597aa0d 。

有很多服務提供免費和付費的雲GPU實例。我們將使用Gradient,它提供免費的GPU和CPU實例層。我們也將使用fast.ai的vision庫來創建模型。

首先點擊這裡創建一個Gradient帳戶:https://console.paperspace.com/signup?gradient=true ;登錄你的帳戶並選擇「Gradient」;單擊「Notebook」;為實例命名(可選);選擇Paperspace + Fast.AI基本容器;

選擇任意一個免費的GPU實例;

單擊「Create Notebook」;

你的Notebook 將從掛起→設置→運行!

單擊「OPEN V1(CLASSIC)」按鈕;對於這個模型,我們將從Bing和DuckDuckGo上獲取圖像,它們將作為數據集。我們將安裝Joe Dockrill編寫的jmd_imagescraper庫,這將為我們完成任務。

單擊 New →Terminal。

鍵入並單擊enter:

!pip install -q jmd_imagescraper有關庫的更多信息,請訪問其官方頁面:https://joedockrill.github.io/blog/2020/09/18/jmd-imagescraper-library/

這把我們帶到了設置的最後。關閉終端,再次打開Notebook。編碼時間到了!

Jupyter Notebook

Jupyter Notebook是一個web應用程式,允許你創建包含實時代碼、公式和文本的文檔。你可以做任何事情,從編寫代碼到發布,以及使用Voilá構建獨立的web應用程式!我們將在Gradient提供的Jupyter Notebook上編寫和執行代碼。

Jupyter Notebook由許多單元組成,可以通過確定執行單元格的順序來控制工作流。

單擊New→Python3打開一個新的Notebook。

你可以編寫文本(在標記單元格中)或編寫python代碼(在代碼單元格中)並按如下方式執行:

使用Run和add cells選項分別執行代碼和添加更多單元格。

2.代碼

可以把每個代碼塊複製到不同的單元上,然後運行它們。

我們先導入fast.ai的vision庫和jmd_imagescraper。

!pip install -Uqq fastbookimport fastbook # 導入fast.ai庫from fastbook import * # 別擔心,它被設計成與import *一起工作fastbook.setup_book()from fastai.vision.widgets import *# 導入圖片爬取器, website: https://joedockrill.github.io/blog/2020/09/18/jmd-imagescraper-library/from jmd_imagescraper.core import * from pathlib import Pathfrom jmd_imagescraper.imagecleaner import *因為我們的目標是對貓和狗的圖像進行分類,所以可以建立一個名為「animals」的文件夾,我們可以下載並保存圖像。

最後一行將path變量設置為當前工作目錄中的「animals」文件夾。

animals=['cat','dog']path = Path().cwd()/"animals"# 指定當前工作目錄的路徑從jmd_imagescraper庫調用duckduckgo_search()函數,該函數接受以下內容作為輸入:

下載目錄(上面指定的路徑變量);文件夾名稱(cat);搜索DuckDuckGo(「貓」)的關鍵字;要下載的圖像數(100)。duckduckgo_search(path,"cat","cats",max_results=100) # 下載100張「貓」圖片並保存到path/cat中等到它搜索圖像,下載並直接保存到「animals」中名為「cat」的文件夾中。結果應該如下所示:

現在讓我們對狗的圖像做同樣的處理。

duckduckgo_search(path,"dog","dogs",max_results=100)# 下載100張「狗」圖片並保存到path/dog中通常會有一些不相關的圖像,這會妨礙訓練,所以我們刪除個別文件。Jupyter提供了一個刪除無關圖像的交互式GUI。

display_image_cleaner(path)

在文件夾之間切換並刪除不相關的圖像。我發現一些像這樣的圖片偷偷地進入了貓和狗的系列。

fns=get_image_files(path)fns查找失敗的下載並從文件夾中取消連結。

failed=verify_images(fns)# 尋找非圖像文件failedfailed.map(Path.unlink);# 從文件夾中取消失敗文件的連結現在讓我們創建一個Datablock對象,它將圖像發送到DataLoaders類。DataLoaders類將給定的數據轉換為學習者可以解釋的信息。

直覺上,學習者是一個觀察所有給定圖像並找到模式的人。如果遇到複雜的關鍵字,不要擔心,一旦你運行模型,一切都會變得有意義。

animals=DataBlock( blocks=(ImageBlock,CategoryBlock), get_items=get_image_files, splitter=RandomSplitter(valid_pct=0.2,seed=42),# 將數據集拆分為訓練集和驗證集 get_y=parent_label, item_tfms=RandomResizedCrop(224, min_scale=0.5), batch_tfms=aug_transforms())需要注意的是在第4行中,我們保留了20%的數據,以便在每個稱為epoch訓練結束時檢查模型。

創建一個名為dls的DataLoaders對象。

dls=animals.dataloaders(path)看看dls對象中單個批處理中的幾個圖像。

dls.valid.show_batch(max_n=4,nrows=1)

要求一個學習者在4個不同的訓練迭代或時期中根據輸入圖像進行學習。這需要一些時間,這取決於你的網絡速度。

learn = cnn_learner(dls, resnet18, metrics=error_rate)# 訓練我們的模型learn.fine_tune(4)

你可能不會看到與圖像中相同的結果,但是錯誤率應該小於0.05。

現在我們為驗證集繪製一個混淆矩陣。混淆矩陣告訴我們驗證集中有多少圖像被正確或錯誤地分類。

interp = ClassificationInterpretation.from_learner(learn)interp.plot_confusion_matrix()# 繪製混淆矩陣

混淆矩陣說明我們的分類器有多好。深藍色對角線上顯示的數字告訴我們正確預測圖像的數量。因此分類器做得很好!

我們將在下一行代碼中看到兩幅錯誤預測的圖片。

interp.plot_top_losses(5, nrows=1)

現在讓我們對模型進行真正的測試,好嗎?下載你選擇的貓或狗圖像並保存在本地。

learn.export()path = Path()path.ls(file_exts='.pkl')learn_inf = load_learner(path/'export.pkl')btn_upload = widgets.FileUpload()# 顯示可用於從系統上傳圖像的小部件btn_upload這將在你的Jupyter Notebook中創建一個小部件,如下所示:

點擊上傳並選擇你的圖片。

現在我們調整圖像大小,以便模型可以預測。最後一行顯示調整大小的圖像。

img = PILImage.create(btn_upload.data[-1])out_pl = widgets.Output()out_pl.clear_output()with out_pl: display(img.to_thumb(128,128))# 調整圖像的大小out_pl

下面的代碼預測圖像中的動物,並以我們可以理解的格式顯示它。

pred,pred_idx,probs = learn_inf.predict(img)# 要求模型預測圖像中的動物!lbl_pred = widgets.Label()lbl_pred.value = f'Prediction: {pred}; Probability: {probs[pred_idx]:.04f}'# 以可讀格式顯示輸出lbl_pred……………….

我們只用了大約200張圖片,就可以創建一個可以對貓和狗進行分類的模型。現在你可以繼續進行更改以創建分類器!

相關焦點

  • 實踐入門NLP:基於深度學習的自然語言處理
    【NLP工程師入門實踐班】——基於深度學習的自然語言處理開車啦!!還不趕緊上車!?【課程亮點】三大模塊,五大應用,手把手快速入門NLP算法+實踐,搭配典型行業應用海外博士講師,豐富項目經驗專業學習社群,隨到隨學【適合人群】本次課程主要適合具備一定編程基礎的開發人員,以及對自然語言處理和深度學習有興趣的踐行者
  • 琵琶入門教程
    琵琶入門教程 音樂視頻 大小: 10.93M
  • 學習畫油畫該怎麼入門?油畫學習的方法教程
    學習畫油畫該怎麼入門?油畫學習的方法教程!學畫油畫是枯燥乏味的,需要耐心,持之以恆,能磨練性格,使人發展思維,開發想像力,邏輯能力會變得越來越強。但是學畫油畫的過程中會把自己的身體弄髒,這個是需要特別注意的。那初學油畫,需要準備什麼東西呢?
  • 深度學習和機器學習的線性代數入門
    本文目錄引言機器學習ML和深度學習NN中的線性代數矩陣向量矩陣乘法轉置矩陣逆矩陣正交矩陣對角矩陣正規方程的轉置矩陣和逆矩陣線性方程向量範數L1範數/Manhattan範數L2範數/在模型構建過程中,我們經常設計各種概念,例如維數災難、正則化、二進位、多分類、有序回歸等。神經元是深度學習的基本單位,該結構完全基於數學概念,即輸入和權重的乘積和。至於Sigmoid,ReLU等等激活函數也依賴於數學原理。
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 機器學習:入門方法與學習路徑 (附資料)
    這一篇就我們的經驗和各位同仁的分享,總結一些對於初學者入門有幫助的方法和對進階有用的資料。 分類與回歸問題需要用已知結果的數據做訓練,屬於「監督學習」 聚類的問題不需要已知標籤,屬於「非監督學習」。入門方法與學習路徑 OK,不廢話,直接切重點丟乾貨了。看似學習難度大,曲線陡的機器學習,對大多數入門者也有一個比較通用的學習路徑,也有一些優秀的入門資料可以降低大家的學習門檻,同時激發我們的學習樂趣。
  • 原畫|繪畫透視入門教程
    藝學繪小編收集整理了繪畫透視入門教程[透視]「透視投影」是最廣為人知的透視。越遠,它變得越小,並且被繪製為好像消失在地平線上的「消失點」。簡而言之,透視圖繪製方法是一種可以通過選擇消失點並根據在此聚集的線對其進行繪製來表達空間的深度和透視圖的方法。
  • 手繪和板繪有什麼不同?如何學習板繪入門?
    怎樣才能入門學習板繪?繪畫初學者學習板繪有哪些技巧?想必這些問題都是繪畫初學者們比較傷腦筋的問題,那麼到底怎樣才能學習板繪插畫入門學習呢?如何學習板繪入門? 趕緊來看看叭: 手繪與漫畫板繪有什麼不同?這個問題得湊個熱鬧,板繪和手繪的不足,體驗最深刻的就是改改改!改作品就變成一件非常苦逼的事情!
  • 乾貨分享 | 深度學習零基礎進階大法!
    深度學習的「聖經」提到入門級的書,就不得不提這一本 Bengio Yoshua,Ian J. Goodfellow 和 Aaron Courville共同撰寫的《深度學習》(Deep Learning)。「這本關於深度學習的教課書是一本為了幫助學生及從業者入門機器學習,並專注於深度學習領域的教材。」
  • 從語言學到深度學習NLP,一文概述自然語言處理
    【51CTO活動】8.26 帶你與清華大學、搜狗、京東大咖們一起探討基於算法的IT運維實踐 本文從兩篇論文出發先簡要介紹了自然語言處理的基本分類和基本概念,再向讀者展示了深度學習中的 NLP。
  • 新手學漫畫怎麼入門?漫畫初學入門教程
    新手學漫畫怎麼入門?漫畫初學入門教程!喜歡畫畫的小白們還在入坑的邊緣來回徘徊猶豫就會敗北?微課菌經常能在私信中看到這樣的字眼:「初學者如何學畫」、「怎樣入門」「學漫畫入門怎麼學習」等相關問題。所以今天出一期漫畫新手常見問題解答特輯,給想學漫畫的萌新解除一些不必要的疑惑!
  • Python入門小遊戲,炫酷打地鼠教程第二部分,都是乾貨
    #python#那份教程還沒有寫完首先肯定是遊戲初始化代碼如下然後開始加載必要的遊戲素材和定義必要的遊戲變量,這個我在教程中已經做了比較詳細的注釋,就不再這裡還講述一遍了。部分代碼如下:再就是遊戲的主循環,這也是非常重要的。這裡的每個部分我在詳細教程中做了相應的注釋,然後在60秒,遊戲結束後,我們就可以開始統計分數以及歷史最高分的對比了。
  • 專家解讀阿法狗原理:是「深度學習」
    它的致命法寶就是模仿人類的「深度學習」工作原理。機器到底是怎樣像人類一樣學習的?有一天它無所不能,人類的未來又將怎樣?北京晨報記者採訪了國內專家進行解讀。  阿法狗原理是「深度學習」  AlphaGo(阿法狗)由位於英國倫敦的谷歌旗下DeepMind公司開發。它的主要工作原理是「深度學習」。
  • 100集PS教程免費領:入門教學,適合零基礎小白
    各位小夥伴,我是實用辦公學習資料搜集狂大飯糰和小米粒,我又來送福利了。本人花錢領取的ps入門教程,現免費贈送給大家,文末附免費領取方式。在這個美圖、美顏已成為必備技能,PS已成為自媒體素材製作不可缺少的工具的時代,如何快速入門並熟練應用PS技能成為很多小夥伴們的硬性需求,本次分享的教程,通過本人親身實踐,十分適合入門級小白學習,我作為一個工程人,以前對PS接觸非常少,更不用談應用並掌握了,但最近隨著開始做一下自媒體內容,逐漸嘗試學習PS,感覺這個教學視頻還是很不錯的,教程比較全面的講解了PS裡的各項工具並附有案例講解
  • 如何開始深度學習?麻省理工開源了一份入門級課程(MIT 6.S094中譯...
    MIT 6.S094是入門自動駕駛必修課,對於剛剛接觸自動駕駛、機器學習、深度學習的新人來說,是非常友好的入門學習材料,全課只有5節1小時課程+3節客邀講座,總長度不超過9小時,中文譯版還可以倍速播放。正式資源放出之後,就一直熱度在線,畢竟現在自動駕駛還是AI非常熱門的領域,大夥對造一輛屬於自己的無人車,還是抱有美好期待的。
  • 插畫入門必備教程
    插畫入門必備教程!在微課菌看來,沒有什麼事情是可以速成的。畫畫就是一個慢過程,找到你自已的頻率去堅持,也許一天兩天你收穫的細微,兩三個月也只是皮毛,但時間久了,你就會有自已的風格,找到屬於自已的路!「輕微課」的網站上非常多的繪畫教程、繪畫素材,也有專業的繪畫課程,學繪畫的小夥伴可以去上面找到很多有用的繪畫學習資源哦!
  • 人物繪製入門教程
    人物繪製入門教程!很多同學都說漫畫人物很難畫,畫出來的人物形態不佳,看起來很醜,其實對於初學者而言建議想要畫好人物要先掌握人物的形體,那麼怎麼掌握人物的形體呢「輕微課」的網站上非常多的繪畫教程、繪畫素材,也有專業的繪畫課程,學繪畫的小夥伴可以去上面找到很多有用的繪畫學習資源哦!
  • 英文教程太難啃?這裡有一份TensorFlow2.0中文教程
    作為當前最為流行的深度學習框架,2.0 Alpha 版的正式發布引人關注。近兩個月,網上已經出現了大量 TensorFlow 2.0 英文教程。在此文章中,機器之心為大家推薦一個持續更新的中文教程,以便大家學習。
  • 萌新如何入門繪畫~初級動漫繪畫的入門教程!
    那麼今天,小編將會以自身的經歷和經驗給大家帶來一篇萌新如何入門繪畫的小教程,雖然無法讓你成為真正的大神,但是,自己還是可以畫出相當不錯水平的圖呢~sai界面的一部分,降低圖層不透明度二:形體的練習形體的練習便是要掌握身體的基本結構,像如頭部的三庭五眼,身體的七頭比例等等,這些基礎的比例知識,這裡我推薦大家去萌繪網自己學習,萌繪網上面有個萌新的繪畫入門教程
  • 數位板繪畫教程入門 數位板繪畫5個步驟
    除了PS/SAI這樣的繪畫軟體學習之外,我們需要進行怎樣的步驟學習呢?今天就給大家帶來數位板繪畫學習的5個步驟!1、學數位板繪畫要了解透視透視是數位板繪畫的最基礎,透視在數位板繪畫中的應用隨處可見,因此學數位板繪畫必須要先了解透視,推薦大家可以去輕微課網站看一下,輕微課上面有很多的板繪教程,輕微課是專門的板繪學習網站!了解數位板繪畫中的透視應用對於學板繪非常有用!