在一小時內構建您的深度學習應用程序

一、說明

????????我已經做了將近十年的數據分析。有時,我使用機器學習技術從數據中獲取見解,并且我習慣于使用經典 ML。

????????雖然我已經通過了神經網絡和深度學習的一些MOOC,但我從未在我的工作中使用過它們,這個領域對我來說似乎很有挑戰性。我有所有這些偏見:

  • 你需要學習很多東西才能開始使用深度學習:數學,不同的框架(我至少聽說過其中的三個:和)和網絡的架構。PyTorchTensorFlowKeras
  • 需要龐大的數據集來擬合模型。
  • 如果沒有強大的計算機(它們還必須具有Nvidia GPU),就不可能獲得像樣的結果,因此很難進行設置。
  • 啟動并運行 ML 驅動的服務有很多樣板文件:您需要處理前端和后端端。

????????我相信分析的主要目標是幫助產品團隊根據數據做出正確的決策。如今,神經網絡絕對可以改善我們的分析,即NLP有助于從文本中獲得更多見解。因此,我決定再次嘗試利用深度學習的力量對我有幫助。

????????這就是我開始?Fast.AI 課程的方式(它在 2022 年初更新,所以我想自之前對 TDS 的評論以來,內容已經發生了變化)。我已經意識到使用深度學習解決你的任務并不是那么困難。

????????本課程遵循自上而下的方法。因此,您從構建一個工作系統開始,然后才能更深入地了解所有必需的基礎知識和細微差別。

????????我在第二周制作了我的第一個 ML 驅動的應用程序(你可以在這里嘗試)。?這是一個圖像分類模型,可以識別我最喜歡的狗品種。令人驚訝的是,即使我的數據集中只有幾千張圖像,它也能很好地工作。這讓我感到鼓舞,我們現在可以輕松構建一項十年前完全神奇的服務。

????????因此,在本文中,您將找到有關構建和部署由機器學習提供支持的第一個服務的初學者級教程。

二、什么是深度學習?

????????當我們使用多層神經網絡作為模型時,深度學習是機器學習的一個特定用例。

????????神經網絡非常強大。根據通用近似定理,神經網絡可以近似任何函數,這意味著它們能夠解決任何任務。

????????現在,您可以將此模型視為一個黑盒,它接受輸入(在我們的例子中 - 一個狗圖像)并返回輸出(在我們的例子中 - 一個標簽)。

作者攝

三、構建模型

您可以在Kaggle上找到此階段的完整代碼。

????????我們將使用Kaggle筆記本來構建我們的深度學習模型。如果您還沒有在 Kaggle 上擁有帳戶,那么值得通過注冊過程。Kaggle是數據科學家的流行平臺,您可以在其中查找數據集,參加競賽以及運行和共享代碼。

????????您可以在 Kaggle 上創建一個筆記本,并在此處執行代碼,就像在本地 Jupyter 筆記本中一樣。Kaggle甚至提供了GPU,因此我們將能夠非常快速地訓練NN模型。

圖片來源:作者

讓我們從導入所有包開始,因為我們將使用許多 Fast.AI 工具。

from fastcore.all import *
from fastai.vision.all import *
from fastai.vision.widgets import *
from fastdownload import download_url

四、加載數據

????????不言而喻,我們需要一個數據集來訓練我們的模型。獲取一組圖像的最簡單方法是使用搜索引擎。

DuckDuckGo搜索引擎有一個易于使用的API和方便的Python包(更多信息),所以我們將使用它。duckduckgo_search

????????讓我們嘗試搜索狗的圖像。我們已指定僅使用具有知識共享許可的圖像。license_image = any

from duckduckgo_search import DDGS
import itertools
with DDGS() as ddgs:res = list(itertools.islice(ddgs.images('photo samoyed happy', license_image = 'any'), 1))

????????在輸出中,我們獲得了有關圖像的所有信息:名稱,URL和大小。

{"title": "Happy Samoyed dog photo and wallpaper. Beautiful Happy Samoyed dog picture", "image": "http://www.dogwallpapers.net/wallpapers/happy-samoyed-dog-wallpaper.jpg", "thumbnail": "https://tse2.mm.bing.net/th?id=OIP.BqTE8dYqO-W9qcCXdGcF6QHaFL&pid=Api", "url": "http://www.dogwallpapers.net/samoyed-dog/happy-samoyed-dog-wallpaper.html", "height": 834, "width": 1193, "source": "Bing"
}

????????現在我們可以使用 Fast.AI 工具下載圖像并顯示縮略圖。

攝影:Barcs Tamás on?Unsplash

????????我們看到一個快樂的薩摩耶德,這意味著它正在工作。因此,讓我們加載更多照片。

????????我的目標是確定五種不同的狗品種(我最喜歡的品種)。我將為每個品種加載圖片并將它們存儲在單獨的目錄中。

breeds = ['siberian husky', 'corgi', 'pomeranian', 'retriever', 'samoyed']
path = Path('dogs_breeds') # defining pathfor b in tqdm.tqdm(breeds):dest = (path/b)dest.mkdir(exist_ok=True, parents=True) download_images(dest, urls=search_images(f'photo {b}'))sleep(10) download_images(dest, urls=search_images(f'photo {b} puppy'))sleep(10) download_images(dest, urls=search_images(f'photo {b} sleep'))sleep(10) resize_images(path/b, max_size=400, dest=path/b)

運行此代碼后,您將在Kaggle的右側面板上看到所有加載的照片。

圖片來源:作者

????????下一步是將數據轉換為適合 Fast.AI 模型的格式 — 。DataBlock

????????您需要為此對象指定一些參數,但我將只強調最重要的參數:

  • splitter=RandomSplitter(valid_pct=0.2, seed=18):Fast.AI 要求您選擇一個驗證集。驗證集是將用于估計模型質量的保留數據。訓練期間不會使用驗證數據來防止過度擬合。在我們的例子中,驗證集是數據集的隨機 20%。我們指定了參數,以便下次能夠重現完全相同的拆分。seed
  • item_tfms=[Resize(256, method=’squish’)]:神經網絡批量處理圖像。這就是為什么我們必須擁有相同大小的圖片。圖像大小調整有不同的方法,我們現在使用 squish,但我們稍后會更詳細地討論它。

????????我們已經定義了一個數據塊。該函數可以向我們顯示一組帶有標簽的隨機圖像。show_batch

攝影:Angel Luciano?on?Unsplash?|攝影:Brigitta Botrágyi?on?Unsplash?|攝影:Charlotte Freeman?on?Unsplash

數據看起來不錯,所以讓我們繼續訓練。

五、訓練模型

您可能會感到驚訝,但下面的兩行代碼將完成所有工作。

????????我們使用了預訓練模型(具有 18 個深層的卷積神經網絡 — )。這就是為什么我們稱該函數。Resnet18fine_tune

????????我們對模型進行了三個時期的訓練,這意味著模型看到了整個數據集 3 次。

????????我們還指定了指標 — (正確標記的圖片的份額)。您可以在每個紀元后的結果中看到此指標(僅使用驗證集計算,以免扭曲結果)。但是,它不會在優化過程中使用,僅供您參考。accuracy

????????整個過程大約需要 30 分鐘,現在我們的模型可以預測狗的品種,準確率為 94.45%。干得好!但是我們能改善這個結果嗎?

六、改進模型:數據清理和擴充

如果希望看到第一個模型盡快工作,請隨時將本部分留到以后,并轉到模型的部署。

????????首先,讓我們看看模型的錯誤:它是否無法區分柯基犬和哈士奇犬或博美犬和獵犬。我們可以使用它。請注意,混淆矩陣也僅使用驗證集進行計算。confusion_matrix

????????Fast.AI 課程中分享的另一個生活技巧是可以使用模型來清理我們的數據。對于它,我們可以看到損失最高的圖像:可能是模型錯誤但置信度高或正確但置信度低的情況。

攝影:Benjamin Vang在Unsplash?|攝影:Xennie Moore?on?Unsplash?|攝影:Alvan Nee?on?Unsplash

????????顯然,第一張圖片的標簽不正確,而第二張圖片同時包含哈士奇和柯基。所以有一些改進的余地。

????????幸運的是,Fast.AI 提供了一個方便的小部件,可以幫助我們快速解決數據問題。可以在筆記本中對其進行初始化,然后可以更改數據集中的標簽。ImageClassifierCleaner

cleaner = ImageClassifierCleaner(learn)
cleaner 

????????在每個類別之后,您可以運行以下代碼來解決問題:刪除圖像或將其移動到正確的文件夾。

for idx in cleaner.delete(): cleaner.fns[idx].unlink()
for idx,breed in cleaner.change(): shutil.move(str(cleaner.fns[idx]), path/breed)

現在我們可以再次訓練我們的模型,并看到準確率有所提高:95.4% vs 94.5%。

正確識別的柯基犬的比例從88%增加到96%。明!

????????改進模型的另一種方法是更改調整大小的方法。我們使用了擠壓方法,但如您所見,它可以改變自然物體的比例。讓我們嘗試更具想象力并使用增強功能。

????????增強是對圖像的更改(例如,對比度改進、旋轉或裁剪)。它將為我們的模型提供更多可變數據,并有望提高其質量。

????????與 Fast.AI 一樣,您只需更改幾個參數即可添加增強功能。

照片由FLOUFFY在Unsplash上拍攝

????????此外,由于使用增強模型在每個時期都會看到略有不同的圖片,因此我們可以增加時期的數量。經過六個時期,我們達到了 95.65% 的準確率——結果要好一些。整個過程花了大約一個小時。

七、下載模型

????????最后一步是下載我們的模型。這很簡單。

learn.export('cuttest_dogs_model.pkl')

????????然后,您將保存一個標準文件(用于存儲對象的常見Python格式)。只需選擇Kaggle筆記本右側面板中的文件旁邊,您就可以在計算機上獲得模型。pickleMore actions

現在我們有了經過訓練的模型,讓我們部署它,以便您可以與世界共享結果。

八、部署模型

我們將使用HuggingFace?Spaces和Gradio來構建我們的Web應用程序。

8.1 設置HuggingFace空間

????????HuggingFace是一家為機器學習提供便捷工具的公司,例如,流行的轉換器庫或共享模型和數據集的工具。今天,我們將使用他們的空間來托管我們的應用程序。

????????首先,如果您尚未注冊,則需要創建一個帳戶。只需幾分鐘。點擊此鏈接。

????????現在是時候創建一個新的空間了。前往“空間”選項卡,然后按“創建”按鈕。您可以在文檔中找到包含更多詳細信息的說明。

????????然后,您需要指定以下參數:

  • 名稱(它將用于您的應用程序URL,因此請明智地選擇),
  • 許可證(我選擇了開源 Apache 2.0 許可證)
  • SDK(在本例中我將使用 Gradio)。

????????Then user-friendly HuggingFace shows you instructions.?TL;DR?now you have a Git repository, and you need to commit your code there.

????????Git 有一個細微差別。由于您的模型可能非常大,因此最好設置 Git LFS(大文件存儲),然后 Git 不會跟蹤此文件的所有更改。要進行安裝,請按照站點上的說明進行操作。

-- cloning repo
git clone https://huggingface.co/spaces/<your_login>/<your_app_name>
cd <your_app_name>-- setting up git-lfs
git lfs install
git lfs track "*.pkl"
git add .gitattributes
git commit -m "update gitattributes to use lfs for pkl files"

8.2? Gradio?

? ????????Gradio是一個框架,允許你只使用Python構建愉快和友好的Web應用程序。這就是為什么它是原型設計的寶貴工具(特別是對于像我這樣沒有深厚JavaScript知識的人來說)。

????????在 Gradio 中,我們將定義我們的接口,指定以下參數:

  • 輸入?— 圖像,
  • 輸出?— 具有五個可能類的標簽,
  • 標題描述一組示例圖像(我們還必須將它們提交到 repo),
  • enable_queue=True將幫助應用程序處理大量流量,如果它變得非常流行,
  • 要為輸入圖像執行的函數

????????為了獲取輸入圖像的標簽,我們需要定義一個預測函數,該函數加載我們的模型并返回一個字典,其中包含每個類的概率。

????????最后,我們將有以下代碼app.py

import gradio as gr
from fastai.vision.all import *learn = load_learner('cuttest_dogs_model.pkl')labels = learn.dls.vocab # list of model classes
def predict(img):img = PILImage.create(img)pred,pred_idx,probs = learn.predict(img)return {labels[i]: float(probs[i]) for i in range(len(labels))}gr.Interface(fn=predict,inputs=gr.inputs.Image(shape=(512, 512)),outputs=gr.outputs.Label(num_top_classes=5),title="The Cuttest Dogs Classifier 🐶🐕🦮🐕?🦺",description="Classifier trainded on images of huskies, retrievers, pomeranians, corgis and samoyeds. Created as a demo for Deep Learning app using HuggingFace Spaces & Gradio.",examples=['husky.jpg', 'retriever.jpg', 'corgi.jpg', 'pomeranian.jpg', 'samoyed.jpg'],enable_queue=True).launch()

????????如果您想了解有關 Gradio 的更多信息,請閱讀文檔。

????????讓我們也創建文件,然后這個庫將安裝在我們的服務器上。requirements.txtfastai

????????所以剩下的唯一一點就是將所有內容推送到 HuggingFace Git 存儲庫。

git add * 
git commit -am 'First version of Cuttest Dogs app'
git push

您可以在?GitHub?上找到完整的代碼。

????????推送文件后,返回 HuggingFace 空間,你會看到一張類似的圖片,展示了構建過程。如果一切正常,您的應用將在幾分鐘內運行。

如果有任何問題,您將看到堆棧跟蹤。然后,您將不得不返回到代碼,修復錯誤,推送新版本,然后再等待幾分鐘。

8.3 開始啟動

????????現在我們可以使用這個模型和真實照片來驗證我家的狗實際上是柯基犬。

九 后記

????????今天,我們已經完成了構建深度學習應用程序的整個過程:從獲取數據集和擬合模型到編寫和部署 Web 應用程序。希望您能夠完成本教程,現在您正在生產中測試您的出色模型。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40136.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Leetcode】91.解碼方法

一、題目 1、題目描述 一條包含字母 A-Z 的消息通過以下映射進行了 編碼 : A -> "1" B -> "2" ... Z -> "26"要 解碼 已編碼的消息,所有數字必須基于上述映射的方法,反向映射回字母(可能有多種方法)。例如,"11106" …

智能數據建模軟件DTEmpower 2023R2新版本功能介紹

DTEmpower是由天洑軟件自主研發的一款通用的智能數據建模軟件&#xff0c;致力于幫助工程師及工科專業學生&#xff0c;利用工業領域中的仿真、試驗、測量等各類數據進行挖掘分析&#xff0c;建立高質量的數據模型&#xff0c;實現快速設計評估、實時仿真預測、系統參數預警、設…

機器學習深度學習——自注意力和位置編碼(數學推導+代碼實現)

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位即將上大四&#xff0c;正專攻機器學習的保研er &#x1f30c;上期文章&#xff1a;機器學習&&深度學習——注意力分數&#xff08;詳細數學推導代碼實現&#xff09; &#x1f4da;訂閱專欄&#xff1a;機器學習…

Cat(2):下載與安裝

1 github源碼下載 要安裝CAT&#xff0c;首先需要從github上下載最新版本的源碼。 官方給出的建議如下&#xff1a; 注意cat的3.0代碼分支更新都發布在master上&#xff0c;包括最新文檔也都是這個分支注意文檔請用最新master里面的代碼文檔作為標準&#xff0c;一些開源網站…

node.js內置模塊fs,path,http使用方法

NodeJs中分為兩部分 一是V8引擎為了解析和執行JS代碼。 二是內置API&#xff0c;讓JS能調用這些API完成一些后端操作。 內置API模塊(fs、path、http等) 第三方API模塊(express、mysql等) fs模塊 fs.readFile()方法&#xff0c;用于讀取指定文件中的內容。 fs.writeFile()方…

MySQL— 基礎語法大全及操作演示!!!(上)

MySQL—— 基礎語法大全及操作演示&#xff08;上&#xff09; 一、MySQL概述1.1 、數據庫相關概念1.1.1 MySQL啟動和停止 1.2 、MySQL 客戶端連接1.3 、數據模型 二、SQL2.1、SQL通用語法2.2、SQL分類2.3、DDL2.3.1 DDL — 數據庫操作2.3.1 DDL — 表操作 2.4、DML2.4.1 DML—…

等保案例 5

用戶簡介 四川省人民代表大會常務委員會&#xff0c;作為省人民代表大會地常設機關&#xff0c;隨著政府部門信息化程度地提高&#xff0c;對信息系統地依賴程度越來越高&#xff0c;同時由于網絡安全形勢日益嚴峻、新型攻擊層出不窮&#xff0c;單位信息化所面臨地各種風險也…

途樂證券-寧德時代發力超充賽道,高壓快充概念強勢拉升,泰永長征漲停

高壓快充概念17日盤中強勢拉升&#xff0c;到發稿&#xff0c;泰永長征漲停&#xff0c;萬祥科技漲超9%&#xff0c;英可瑞漲逾8%&#xff0c;迦南智能漲超4%。 消息面上&#xff0c;8月16日&#xff0c;寧德時代舉行線下新品發布會&#xff0c;正式發布全球首款磷酸鐵鋰4C超充…

Spark第二課RDD的詳解

1.前言 RDD JAVA中的IO 1.小知識點穿插 1. 裝飾者設計模式 裝飾者設計模式:本身功能不變,擴展功能. 舉例&#xff1a; 數據流的讀取 一層一層的包裝&#xff0c;進而將功能進行進一步的擴展 2.sleep和wait的區別 本質區別是字體不一樣,sleep斜體,wait正常 斜體是靜態方法…

經過幾天的亂搞,已經搞出來第一次stm32點燈程序

看吧那個燈泡已經亮了 stm32跟51不同的地方是這里引腳一組16個&#xff0c;如PA0,PA1,PA2,,,,,,PA15 51一組8個 例如P00,P01,P02,,,,P07

全新重構,探尋 24 歲 QQ 大重構背后的思考

在瞬息萬變的互聯網行業中,年過二十四的 QQ 堪稱超長壽的產品,見證了中國互聯網崛起的完整歷程。然而,如今這個元老級產品經歷了一次從內到外徹底的重構。 在這次重構中,QQ 選擇了 Electron 作為 UI 跨平臺開發框架。盡管 Electron 被 Slack、Visual Studio Code 和 Disco…

[Go版]算法通關村第十一關青銅——理解位運算的規則

目錄 數字在計算機中的表示&#xff1a;機器數、真值對機器數進一步細化&#xff1a;原碼、反碼、補碼為何會有原碼、反碼和補碼為何計算機中的按位運算使用的是補碼&#xff1f;位運算規則與、或、異或和取反移位運算移位運算與乘除法的關系位運算常用技巧?? 操作某個位的數…

Unity用NPOI創建Exect表,保存數據,和修改刪除數據。以及打包后的坑——無法打開新創建的Exect表

先說坑花了一下午才找到解決方法解決&#xff0c; 在Unity編輯模式下點擊物體創建對應的表&#xff0c;獲取物體名字與在InputText填寫的注釋數據。然后保存。創建Exect表可以打開&#xff0c;打包PC后&#xff0c;點擊物體創建的表&#xff0c;打不開文件破損 解決方法&#…

大數據培訓前景怎么樣?企業需求量大嗎

大數據行業對大家來說并不陌生&#xff0c;大數據行業市場人才需求量大&#xff0c;越早入行越有優勢&#xff0c;發展機會和上升空間等大。不少人通過大數據培訓來提升自己的經驗和自身技術能力&#xff0c;以此來獲得更好的就業機會。 2023大數據培訓就業前景怎么樣呢?企業需…

ubuntu18 下更改 mysql 數據目錄

一、修改步驟 更改 MySQL 的數據目錄需要注意以下幾個步驟&#xff1a; 停止 MySQL 服務 在 Ubuntu 中&#xff0c;你可以使用以下命令停止 MySQL 服務&#xff1a; sudo systemctl stop mysql 復制現有數據 假設你的新的數據目錄是 /new/dir/mysql&#xff0c;你應該使用 rsy…

區間覆蓋 線段覆蓋 二分

4195. 線段覆蓋 - AcWing題庫 P2082 區間覆蓋&#xff08;加強版&#xff09; - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 做法&#xff1a; void solve() {int n; cin>>n;vector<array<LL,2>> seg(n);for(auto &t: seg) cin>>t[0]>>…

從視覺裝備到智能駕駛,天準科技能否打造第二增長極?

智能網聯汽車已經成為了上市公司跨界布局的熱門賽道。 天準科技是工業視覺智能裝備領域的龍頭企業&#xff0c;主要客戶包括蘋果、三星等企業。招股說明書顯示&#xff0c;2016年至2018年&#xff0c;天準科技來源于蘋果公司及其供應商的收入合計占比達到49.98%、67.99%及76.0…

Spark操作Hive表冪等性探索

前言 旁邊的實習生一邊敲著鍵盤一邊很不開心的說:做數據開發真麻煩,數據bug排查太繁瑣了,我今天數據跑的有問題,等我處理完問題重新跑了代碼,發現報表的數據很多重復,準備全部刪了重新跑。 我:你的數據操作具備冪等性嗎? 實習生:啥是冪等性?數倉中的表還要考慮冪等…

JVS開源基礎框架:平臺基本信息介紹

JVS是面向軟件開發團隊可以快速實現應用的基礎開發腳手架&#xff0c;主要定位于企業信息化通用底座&#xff0c;采用微服務分布式框架&#xff0c;提供豐富的基礎功能&#xff0c;集成眾多業務引擎&#xff0c;它靈活性強&#xff0c;界面化配置對開發者友好&#xff0c;底層容…

互聯網賬號被封禁解決辦法,以qq為例

百度搜索&#xff1a;互聯網信息服務投訴平臺 電腦端瀏覽器&#xff1a;打開 ts.isc.org.cn 推薦使用360極速瀏覽器 谷歌瀏覽器 提交完成后&#xff0c;將投訴碼保存&#xff0c;可以在“查詢評價”處用投訴碼查詢進度