自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深度學(xué)習(xí)框架Flash如何僅用幾行代碼構(gòu)建圖像分類器?

譯文
人工智能 深度學(xué)習(xí)
圖像分類是我們想要預(yù)測哪個類別屬于圖像的任務(wù)。由于圖像表示,這項任務(wù)很困難。如果我們將圖像鋪平,它會創(chuàng)建一個長長的一維向量。此外,該表示將丟失相鄰信息。因此,我們需要深度學(xué)習(xí)來提取特征并預(yù)測結(jié)果。

[[412621]]

【51CTO.com快譯】一、簡介

圖像分類是我們想要預(yù)測哪個類別屬于圖像的任務(wù)。由于圖像表示,這項任務(wù)很困難。如果我們將圖像鋪平,它會創(chuàng)建一個長長的一維向量。此外,該表示將丟失相鄰信息。因此,我們需要深度學(xué)習(xí)來提取特征并預(yù)測結(jié)果。

有時,構(gòu)建深度學(xué)習(xí)模型會成為一項艱巨的任務(wù)。雖然我們?yōu)閳D像分類創(chuàng)建了一個基礎(chǔ)模型,但需要花大量時間來創(chuàng)建代碼。我們必須準(zhǔn)備好用于準(zhǔn)備數(shù)據(jù)、訓(xùn)練模型并測試模型的代碼,并將模型部署到服務(wù)器上。這時Flash就有了用武之地!

Flash是一種高級深度學(xué)習(xí)框架,用于快速構(gòu)建、訓(xùn)練和測試深度學(xué)習(xí)模型。Flash基于PyTorch框架。所以如果您了解PyTorch,就會很熟悉Flash。

與PyTorch和Lighting相比,F(xiàn)lash易于使用,但不如以前的庫靈活。如果您想構(gòu)建更復(fù)雜的模型,可以使用Lightning或直接使用PyTorch。

借助Flash,您可以用幾行代碼構(gòu)建深度學(xué)習(xí)模型!因此,如果您剛接觸深度學(xué)習(xí),別害怕。Flash可以幫助您構(gòu)建深度學(xué)習(xí)模型,不會因代碼而感到困惑。

本文將介紹如何使用Flash構(gòu)建圖像分類器。

二、實施

安裝庫

想安裝庫,您可以使用pip命令,如下所示:

  1. pip install lightning-flash 

如果該命令不起作用,可以使用其GitHub存儲庫安裝該庫。命令如下所示:

  1. pip install git+https://github.com/PyTorchLightning/lightning-flash.git 

在我們可以成功下載軟件包之后,現(xiàn)在可以加載庫。我們還將種子設(shè)為編號42。這是執(zhí)行此操作的代碼:

  1. from pytorch_lightning import seed_everything 
  2.  
  3. import flash 
  4. from flash.core.classification import Labels 
  5. from flash.core.data.utils import download_data 
  6. from flash.image import ImageClassificationData, ImageClassifier 
  7.  
  8. set the random seeds. 
  9. seed_everything(42) 
  10. Global seed set to 42  
  11. 42 

下載數(shù)據(jù)

安裝完庫后,現(xiàn)在不妨獲取數(shù)據(jù)。出于演示需要,我們將使用名為Cat和Dog數(shù)據(jù)集的數(shù)據(jù)集。

該數(shù)據(jù)集含有兩個類別:貓和狗的圖像。想訪問數(shù)據(jù)集,您可以在Kaggle找到該數(shù)據(jù)集??梢栽?a >此處訪問數(shù)據(jù)集。

加載數(shù)據(jù)

下載數(shù)據(jù)后,不妨將數(shù)據(jù)集加載到一個對象中。我們將使用from_folders方法將數(shù)據(jù)放入到ImageClassification對象中。這是執(zhí)行此操作的代碼:

  1. datamodule = ImageClassificationData.from_folders( 
  2.     train_folder="cat_and_dog/training_set"
  3.     val_folder="cat_and_dog/validation_set"

加載模型

我們加載數(shù)據(jù)后,下一步就是加載模型。由于我們不會從頭開始構(gòu)建自己的架構(gòu),將使用基于現(xiàn)有卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)的預(yù)訓(xùn)練模型。

我們將使用已經(jīng)過預(yù)訓(xùn)練的ResNet-50模型。此外,我們基于數(shù)據(jù)集設(shè)置類別的數(shù)量。這是執(zhí)行此操作的代碼:

  1. model = ImageClassifier(backbone="resnet50", num_classes=datamodule.num_classes) 

訓(xùn)練模型

加載模型后,現(xiàn)在不妨訓(xùn)練模型。我們需要先初始化Trainer對象。我們將用3個輪次(epoch)訓(xùn)練模型。此外,我們啟用GPU以訓(xùn)練模型。這是執(zhí)行此操作的代碼:

  1. trainer = flash.Trainer(max_epochs=3, gpus=1) 
  2. GPU available: True, used: True TPU available: False, using: 0 TPU cores 

初始化對象后,不妨訓(xùn)練模型。為訓(xùn)練模型,我們可以使用一個名為finetune的函數(shù)。在函數(shù)里面,我們設(shè)置模型和數(shù)據(jù)。此外,我們將訓(xùn)練策略設(shè)置為freeze(凍結(jié)),這表明我們不想訓(xùn)練特征提取器。換句話說,我們只訓(xùn)練分類器部分。

這是執(zhí)行此操作的代碼:

  1. trainer.finetune(model, datamodule=datamodule, strategy="freeze"
  2. LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0] | Name | Type | Params ---------------------------------------- 0 | metrics | ModuleDict | 0 1 | backbone | Sequential | 23.5 M 2 | head | Sequential | 4.1 K ---------------------------------------- 57.2 K Trainable params 23.5 M Non-trainable params 23.5 M Total params 94.049 Total estimated model params size (MB)  
  3. Validation sanity check: 0it [00:00, ?it/s] 
  4. Global seed set to 42  
  5. Training: 0it [00:00, ?it/s] 
  6. Validating: 0it [00:00, ?it/s] 
  7. Validating: 0it [00:00, ?it/s] 
  8. Validating: 0it [00:00, ?it/s] 

這是評估結(jié)果:

從結(jié)果中可以看出,我們的模型其準(zhǔn)確率達到了約97%。不賴!現(xiàn)在不妨拿幾個新數(shù)據(jù)測試模型。

測試模型

我們將使用針對該模型沒有訓(xùn)練過的樣本數(shù)據(jù)。以下是我們將測試模型的樣本:

  1. import matplotlib.pyplot as plt 
  2. from PIL import Image 
  3.  
  4. fig, ax = plt.subplots(1, 5, figsize=(40,8)) 
  5. for i in range(5): 
  6.     ax[i].imshow(Image.open(f'cat_and_dog/testing/{i+1}.jpg')) 
  7. plt.show() 

為了測試模型,我們可以使用flash庫中的predict方法。這是執(zhí)行此操作的代碼:

  1. model.serializer = Labels() 
  2.  
  3. predictions = model.predict(["cat_and_dog/testing/1.jpg"
  4.                              "cat_and_dog/testing/2.jpg"
  5.                              "cat_and_dog/testing/3.jpg"
  6.                              "cat_and_dog/testing/4.jpg"
  7.                              "cat_and_dog/testing/5.jpg"]) 
  8. print(predictions) 
  9. ['dogs''dogs''cats''cats''dogs'

從上面的結(jié)果可以看出,模型預(yù)測了帶有正確標(biāo)簽的樣本。很好!不妨保存模型以備后用。

保存模型

我們已訓(xùn)練并測試了模型。不妨使用save_checkpoint方法保存模型。這是執(zhí)行此操作的代碼:

  1. trainer.save_checkpoint("cat_dog_classifier.pt"

如果您想針對其他代碼加載模型,可以使用load_from_checkpoint方法。這是執(zhí)行此操作的代碼:

  1. model = ImageClassifier.load_from_checkpoint("cat_dog_classifier.pt"

三、結(jié)語

做得好!您已學(xué)習(xí)了如何使用Flash構(gòu)建圖像分類器。正如文章開頭所說,它只需要幾行代碼!是不是很酷?

但愿本文可以幫助您根據(jù)自己的情況構(gòu)建自己的深度學(xué)習(xí)模型。如果您想實施一個更復(fù)雜的模型,但愿能開始學(xué)習(xí) PyTorch。

原文標(biāo)題:How to Build An Image Classifier in Few Lines of Code with Flash,作者:Irfan Alghani Khalid

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2018-06-19 08:35:51

情感分析數(shù)據(jù)集代碼

2021-10-18 09:09:16

數(shù)據(jù)庫

2022-12-30 08:00:00

深度學(xué)習(xí)集成模型

2018-04-09 10:20:32

深度學(xué)習(xí)

2023-02-28 08:00:00

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2016-12-27 15:33:25

softmax分類器課程

2020-08-10 06:36:21

強化學(xué)習(xí)代碼深度學(xué)習(xí)

2017-09-09 06:04:22

深度學(xué)習(xí)人物圖像神經(jīng)網(wǎng)絡(luò)

2018-05-28 13:12:49

深度學(xué)習(xí)Python神經(jīng)網(wǎng)絡(luò)

2015-02-09 10:43:00

JavaScript

2022-04-01 09:30:00

開源AutoXGBAPI

2019-04-01 05:42:24

JavaScript視覺程序代碼

2024-09-11 08:34:28

2017-05-12 16:25:44

深度學(xué)習(xí)圖像補全tensorflow

2018-07-19 15:13:15

深度學(xué)習(xí)圖像

2024-09-29 09:32:58

2021-11-02 11:48:39

深度學(xué)習(xí)惡意軟件觀察

2022-09-29 23:53:06

機器學(xué)習(xí)遷移學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2022-11-11 15:07:50

深度學(xué)習(xí)函數(shù)鑒別器

2019-12-05 09:50:54

GitHub 技術(shù)深度學(xué)習(xí)
點贊
收藏

51CTO技術(shù)棧公眾號