0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

讓PyTorch 使用更輕便的深度學(xué)習(xí)框架

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 作者:量子位 ? 2020-08-27 15:47 ? 次閱讀

一直以來,PyTorch就以簡(jiǎn)單又好用的特點(diǎn),廣受AI研究者的喜愛。 但是,一旦任務(wù)復(fù)雜化,就可能會(huì)發(fā)生一系列錯(cuò)誤,花費(fèi)的時(shí)間更長(zhǎng)。 于是,就誕生了這樣一個(gè)“友好”的PyTorch Lightning。

直接在GitHub上斬獲6.6k星。

首先,它把研究代碼與工程代碼相分離,還將PyTorch代碼結(jié)構(gòu)化,更加直觀的展現(xiàn)數(shù)據(jù)操作過程。 這樣,更加易于理解,不易出錯(cuò),本來很冗長(zhǎng)的代碼一下子就變得輕便了,對(duì)AI研究者十分的友好。 話不多說,我們就來看看這個(gè)輕量版的“PyTorch”。

關(guān)于Lightning

Lightning將DL/ML代碼分為三種類型:研究代碼、工程代碼、非必要代碼。 針對(duì)不同的代碼,Lightning有不同的處理方式。 這里的研究代碼指的是特定系統(tǒng)及其訓(xùn)練方式,比如GAN、VAE,這類的代碼將由LightningModule直接抽象出來。 我們以MNIST生成為例。

l1 = nn.Linear(...)l2 = nn.Linear(...)decoder = Decoder()
x1 = l1(x)x2 = l2(x2)out = decoder(features, x)
loss = perceptual_loss(x1, x2, x) + CE(out, x)

而工程代碼是與培訓(xùn)此系統(tǒng)相關(guān)的所有代碼,比如提前停止、通過GPU分配、16位精度等。 我們知道,這些代碼在大多數(shù)項(xiàng)目中都相同,所以在這里,直接由Trainer抽象出來。

model.cuda(0)x = x.cuda(0)
distributed = DistributedParallel(model)
with gpu_zero:download_data()
dist.barrier()

剩下的就是非必要代碼,有助于研究項(xiàng)目,但是與研究項(xiàng)目無關(guān),可能是檢查梯度、記錄到張量板。此代碼由Callbacks抽象出來。

# log samplesz = Q.rsample()generated = decoder(z)self.experiment.log('images', generated)

此外,它還有一些的附加功能,比如你可以在CPU,GPU,多個(gè)GPU或TPU上訓(xùn)練模型,而無需更改PyTorch代碼的一行;你可以進(jìn)行16位精度訓(xùn)練,可以使用Tensorboard的五種方式進(jìn)行記錄。 這樣說,可能不太明顯,我們就來直觀的比較一下PyTorch與PyTorch Lightning之間的差別吧。

PyTorch與PyTorch Lightning比較

直接上圖。

我們就以構(gòu)建一個(gè)簡(jiǎn)單的MNIST分類器為例,從模型、數(shù)據(jù)、損失函數(shù)、優(yōu)化這四個(gè)關(guān)鍵部分入手。

模型

首先是構(gòu)建模型,本次設(shè)計(jì)一個(gè)3層全連接神經(jīng)網(wǎng)絡(luò),以28×28的圖像作為輸入,將其轉(zhuǎn)換為數(shù)字0-9的10類的概率分布。

兩者的代碼完全相同。意味著,若是要將PyTorch模型轉(zhuǎn)換為PyTorch Lightning,我們只需將nn.Module替換為pl.LightningModule。 也許這時(shí)候,你還看不出這個(gè)Lightning的神奇之處。不著急,我們接著看。

數(shù)據(jù)

接下來是數(shù)據(jù)的準(zhǔn)備部分,代碼也是完全相同的,只不過Lightning做了這樣的處理。 它將PyTorch代碼組織成了4個(gè)函數(shù),prepare_data、train_dataloader、val_dataloader、test_dataloader。

prepare_data 這個(gè)功能可以確保在你使用多個(gè)GPU的時(shí)候,不會(huì)下載多個(gè)數(shù)據(jù)集或者對(duì)數(shù)據(jù)進(jìn)行多重操作。這樣所有代碼都確保關(guān)鍵部分只從一個(gè)GPU調(diào)用。 這樣就解決了PyTorch老是重復(fù)處理數(shù)據(jù)的問題,這樣速度也就提上來了。 train_dataloader, val_dataloader, test_dataloader 每一個(gè)都負(fù)責(zé)返回相應(yīng)的數(shù)據(jù)分割,這樣就能很清楚的知道數(shù)據(jù)是如何被操作的,在以往的教程里,都幾乎看不到它們的是如何操作數(shù)據(jù)的。 此外,Lightning還允許使用多個(gè)dataloaders來測(cè)試或驗(yàn)證。

優(yōu)化

接著就是優(yōu)化。

不同的是,Lightning被組織到配置優(yōu)化器的功能中。如果你想要使用多個(gè)優(yōu)化器,則可同時(shí)返回兩者。

損失函數(shù)

對(duì)于n向分類,我們要計(jì)算交叉熵?fù)p失。兩者的代碼是完全一樣的。

此外,還有更為直觀的——驗(yàn)證和訓(xùn)練循環(huán)。

在PyTorch中,我們知道,需要你自己去構(gòu)建for循環(huán),可能簡(jiǎn)單的項(xiàng)目還好,但是一遇到更加復(fù)雜高級(jí)的項(xiàng)目就很容易翻車了。 而Lightning里這些抽象化的代碼,其背后就是由Lightning里強(qiáng)大的trainer團(tuán)隊(duì)負(fù)責(zé)了。

PyTorch Lightning安裝教程

看到這里,是不是也想安裝下來試一試。 PyTorch Lightning安裝十分簡(jiǎn)單。 代碼如下:

conda activate my_envpip install pytorch-lightning

或在沒有conda環(huán)境的情況下,可以在任何地方使用pip。 代碼如下:

pip install pytorch-lightning

創(chuàng)建者也有大來頭

William Falcon,PyTorch Lightning 的創(chuàng)建者,現(xiàn)在在紐約大學(xué)的人工智能專業(yè)攻讀博士學(xué)位,在《福布斯》擔(dān)任AI特約作者。 2018年,從哥倫比亞大學(xué)計(jì)算機(jī)科學(xué)與統(tǒng)計(jì)學(xué)專業(yè)畢業(yè),本科期間,他還曾輔修數(shù)學(xué)。 現(xiàn)在已獲得Google Deepmind資助攻讀博士學(xué)位的獎(jiǎng)學(xué)金,去年還收到Facebook AI Research實(shí)習(xí)邀請(qǐng)。 此外,他還曾是一個(gè)海軍軍官,接受過美國(guó)海軍海豹突擊隊(duì)的訓(xùn)練。

前不久,華爾街日?qǐng)?bào)就曾還曾提到這個(gè)團(tuán)隊(duì),他們正在研究呼吸系統(tǒng)疾病與呼吸模式之間的聯(lián)系??赡軙?huì)應(yīng)用到的場(chǎng)景,是通過電話在診斷新冠癥狀。目前,該團(tuán)隊(duì)還處在數(shù)據(jù)收集階段。 果然,優(yōu)秀的人,干什么都是優(yōu)秀的。嘆氣……


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    46696

    瀏覽量

    237182
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5471

    瀏覽量

    120904
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    802

    瀏覽量

    13121

原文標(biāo)題:讓 PyTorch 更輕便,這款深度學(xué)習(xí)框架你值得擁有!在GitHub上斬獲 6.6k 星

文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    迅為RK3399開發(fā)板人工智能深度學(xué)習(xí)框架

    `迅為率先在RK3399 開發(fā)板上支持了Docker、TensorFlow目標(biāo)檢測(cè)API、OpenCV、Keras、scikit-learn、pytorch和Python等,組成了人工智能深度學(xué)習(xí)
    發(fā)表于 05-21 17:28

    為什么學(xué)習(xí)深度學(xué)習(xí)需要使用PyTorch和TensorFlow框架

    如果你需要深度學(xué)習(xí)模型,那么 PyTorch 和 TensorFlow 都是不錯(cuò)的選擇。 并非每個(gè)回歸或分類問題都需要通過深度學(xué)習(xí)來解決。
    的頭像 發(fā)表于 09-14 10:57 ?3401次閱讀

    Facebook研究開放新框架,深度學(xué)習(xí)更加容易

    FAIR一直是深度學(xué)習(xí)領(lǐng)域研究和開源框架的定期貢獻(xiàn)者。從PyTorch到ONNX, FAIR團(tuán)隊(duì)為實(shí)現(xiàn)深度
    的頭像 發(fā)表于 03-13 15:23 ?1669次閱讀

    天才黑客George Hotz開源了一個(gè)小型深度學(xué)習(xí)框架tinygrad

    最近,天才黑客 George Hotz 開源了一個(gè)小型深度學(xué)習(xí)框架 tinygrad,兼具 PyTorch 和 micrograd 的功能。tinygrad 的代碼數(shù)量不到 1000
    的頭像 發(fā)表于 12-16 09:36 ?4181次閱讀

    基于PyTorch深度學(xué)習(xí)入門教程之PyTorch的安裝和配置

    神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),并且運(yùn)用各種深度學(xué)習(xí)算法訓(xùn)練網(wǎng)絡(luò)參數(shù),進(jìn)而解決各種任務(wù)。 本文從PyTorch環(huán)境配置開始。PyTorch是一種Python接口的深度
    的頭像 發(fā)表于 02-16 15:15 ?2541次閱讀

    基于PyTorch深度學(xué)習(xí)入門教程之PyTorch簡(jiǎn)單知識(shí)

    基于Python的科學(xué)計(jì)算框架,用于進(jìn)行深度學(xué)習(xí)相關(guān)研究。對(duì)于Python語言的入門,可以參考之前的兩篇介紹PythonNumpy的博客。分別是Python Numpy 教程(
    的頭像 發(fā)表于 02-16 15:20 ?2210次閱讀

    八種主流深度學(xué)習(xí)框架的介紹

    導(dǎo)讀:近幾年隨著深度學(xué)習(xí)算法的發(fā)展,出現(xiàn)了許多深度學(xué)習(xí)框架。這些框架各有所長(zhǎng),各具特色。常用的開
    的頭像 發(fā)表于 04-26 18:45 ?8372次閱讀

    PyTorch開源深度學(xué)習(xí)框架簡(jiǎn)介

    PyTorch 是一種開源深度學(xué)習(xí)框架,以出色的靈活性和易用性著稱。這在一定程度上是因?yàn)榕c機(jī)器學(xué)習(xí)開發(fā)者和數(shù)據(jù)科學(xué)家所青睞的熱門 Pytho
    的頭像 發(fā)表于 07-29 10:26 ?4345次閱讀

    深度學(xué)習(xí)框架PyTorch和TensorFlow如何選擇

    在 AI 技術(shù)興起后,深度學(xué)習(xí)框架 PyTorch 和 TensorFlow 兩大陣營(yíng)似乎也爆發(fā)了類似的「戰(zhàn)爭(zhēng)」。這兩個(gè)陣營(yíng)背后都有大量的支持者,并且他們都有充足的理由來說明為什么他們
    發(fā)表于 02-02 10:28 ?1003次閱讀

    深度學(xué)習(xí)框架pytorch入門與實(shí)踐

    深度學(xué)習(xí)框架pytorch入門與實(shí)踐 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 08-17 16:03 ?1547次閱讀

    深度學(xué)習(xí)框架是什么?深度學(xué)習(xí)框架有哪些?

    深度學(xué)習(xí)框架是什么?深度學(xué)習(xí)框架有哪些?? 深度
    的頭像 發(fā)表于 08-17 16:03 ?2649次閱讀

    深度學(xué)習(xí)框架pytorch介紹

    深度學(xué)習(xí)框架pytorch介紹 PyTorch是由Facebook創(chuàng)建的開源機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 08-17 16:10 ?1680次閱讀

    TensorFlow與PyTorch深度學(xué)習(xí)框架的比較與選擇

    深度學(xué)習(xí)作為人工智能領(lǐng)域的一個(gè)重要分支,在過去十年中取得了顯著的進(jìn)展。在構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型的過程中,深度
    的頭像 發(fā)表于 07-02 14:04 ?857次閱讀

    PyTorch深度學(xué)習(xí)開發(fā)環(huán)境搭建指南

    PyTorch作為一種流行的深度學(xué)習(xí)框架,其開發(fā)環(huán)境的搭建對(duì)于深度學(xué)習(xí)研究者和開發(fā)者來說至關(guān)重要
    的頭像 發(fā)表于 07-16 18:29 ?724次閱讀

    Pytorch深度學(xué)習(xí)訓(xùn)練的方法

    掌握這 17 種方法,用最省力的方式,加速你的 Pytorch 深度學(xué)習(xí)訓(xùn)練。
    的頭像 發(fā)表于 10-28 14:05 ?123次閱讀
    <b class='flag-5'>Pytorch</b><b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>訓(xùn)練的方法