旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程

時(shí)間:2020-08-19來源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-08-19點(diǎn)擊量:作者:Sissi



  PyTorch是一個(gè)不斷發(fā)展的深度學(xué)習(xí)框架,具有許多令人興奮的附加功能。我們將回顧其基本元素,并逐步演示構(gòu)建簡(jiǎn)單的深度神經(jīng)網(wǎng)絡(luò)(DNN)的示例。
 

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  PyTorch的基礎(chǔ)知識(shí)-簡(jiǎn)介
 

  自從2017年初推出它以來, PyTorch 已經(jīng)成為高度流行且廣泛使用的深度學(xué)習(xí)(DL)框架。自從不起眼的開始以來,它就引起了全世界工業(yè)界和學(xué)術(shù)界的嚴(yán)肅AI研究人員和從業(yè)者的注意,并且這些年來已經(jīng)顯著成熟。
 

  數(shù)十名DL發(fā)燒友和專業(yè)人士從百度開始了他們的旅程,但是基于TensorFlow的學(xué)習(xí)曲線一直很艱難。另一方面,PyTorch從一開始就以一種直觀的方式進(jìn)行DL編程,以一種易于理解且易于逐步學(xué)習(xí)的方式專注于基本線性代數(shù)和數(shù)據(jù)流運(yùn)算。
 

  由于采用了這種模塊化方法,與遵循較為嚴(yán)格的TF和基于TF的工具框架相比,使用PyTorch進(jìn)行復(fù)雜的DL架構(gòu)的構(gòu)建和試驗(yàn)變得容易得多。此外,PyTorch的構(gòu)建是為了與Python生態(tài)系統(tǒng)的數(shù)值計(jì)算基礎(chǔ)架構(gòu)無縫集成,而Python是數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的通用語言,它擺脫了這一日益流行的浪潮。
 

  使用PyTorch進(jìn)行Tensor操作
 

  Tensors是任何DL框架的核心。PyTorch為程序員提供了極大的靈活性,使其可以在Tensors流經(jīng)與相對(duì)高級(jí)的面向?qū)ο驛PI配對(duì)的網(wǎng)絡(luò)(稱為計(jì)算圖)時(shí)創(chuàng)建,組合和處理Tensors。
 

  什么是Tensors?
 

  通過稱為Tensors的數(shù)據(jù)/數(shù)學(xué)結(jié)構(gòu)來完成表示機(jī)器學(xué)習(xí)(ML)(尤其是DNN)的數(shù)據(jù)(例如,有關(guān)物理世界或某些業(yè)務(wù)流程的數(shù)據(jù)) 。Tensors是一個(gè)可以容納N 維數(shù)據(jù)的容器。Tensors經(jīng)常與另一個(gè)更熟悉的數(shù)學(xué)對(duì)象矩陣 (具體來說是二維Tensors)互換使用 。實(shí)際上,Tensors是二維矩陣到N維空間的推廣 。
 

  用簡(jiǎn)單的術(shù)語來說,可以將標(biāo)量矢量矩陣Tensors視為一種流。
 

  1)標(biāo)量是0維Tensors。

  2)向量是一維Tensors。

  3)矩陣是二維Tensors

  4)Tensors是廣義的N維 Tensors。N可以是3到無窮大的任何數(shù)字。
 

  通常,這些尺寸也稱為 等級(jí)。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  為什么Tensors對(duì)于ML和DL很重要?
 

  考慮一個(gè)監(jiān)督的機(jī)器學(xué)習(xí)問題。您會(huì)得到帶有某些標(biāo)簽的數(shù)據(jù)表(可以是數(shù)字實(shí)體或二進(jìn)制分類,例如“是/否”答案)。為了使用ML算法對(duì)其進(jìn)行處理,必須將數(shù)據(jù)作為數(shù)學(xué)對(duì)象進(jìn)行饋送。表格自然等效于2-D矩陣,其中單個(gè)行(或?qū)嵗?或單個(gè)列(或要素)可以視為一維矢量。
 

  類似地,黑白圖像可以視為包含數(shù)字0或1的2-D矩陣??梢詫⑵漭斎肷窠?jīng)網(wǎng)絡(luò)以進(jìn)行圖像分類或分割任務(wù)。
 

  時(shí)間序列或序列數(shù)據(jù)(例如,來自監(jiān)視機(jī)的ECG數(shù)據(jù)或股票市場(chǎng)價(jià)格跟蹤數(shù)據(jù)流)是二維(二維)數(shù)據(jù)的另一個(gè)示例,其中一維(時(shí)間)是固定的。
 

  這些是在經(jīng)典ML(例如線性回歸,支持向量機(jī),決策樹等)和DL算法中使用2-DTensors的示例。
 

  超越二維,彩色或灰度圖像可被視為3-DTensors,其中每個(gè)像素都與所謂的“色彩通道”相關(guān)聯(lián)-“ 3-數(shù)字”矢量代表紅綠藍(lán)中的強(qiáng)度(RGB)光譜。這是一個(gè)3-DTensors的例子。
 

  類似地,視頻可以被認(rèn)為是時(shí)間上的彩色圖像(或幀)序列,并且可以被認(rèn)為是4DTensors。
 

  簡(jiǎn)而言之,可以通過多維Tensors輕松表示來自物理世界,傳感器和儀器,商業(yè)和金融,科學(xué)或社會(huì)實(shí)驗(yàn)的各種數(shù)據(jù),以使其適合在計(jì)算機(jī)內(nèi)部通過ML/DL算法進(jìn)行處理。
 

  讓我們看看PyTorch如何定義和處理Tensors。
 

  在PyTorch中創(chuàng)建和轉(zhuǎn)換Tensors
 

  可以從Python列表中定義Tensors,如下所示:

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  可以按以下方式訪問和索引實(shí)際元素

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  具有特定數(shù)據(jù)類型的Tensors可以輕松創(chuàng)建(例如,浮點(diǎn)數(shù))

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  尺寸和尺寸易于閱讀

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們可以更改Tensors的視圖。讓我們從一維Tensors開始,如下所示:

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  然后將視圖更改為二維Tensors,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  在PyTorchTensors和NumPy數(shù)組之間來回切換既簡(jiǎn)單又有效。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  從熊貓系列對(duì)象進(jìn)行轉(zhuǎn)換也很容易,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  最后,可以轉(zhuǎn)換回Python列表,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  使用PyTorch Tensors的向量和矩陣數(shù)學(xué)
 

  PyTorch提供了一個(gè)易于理解的API和編程工具箱,以數(shù)學(xué)方式處理Tensors。我們?cè)谶@里顯示一維和二維Tensors的基本操作。
 

  簡(jiǎn)單的向量加法

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  標(biāo)量矢量乘法

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  線性組合

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  元素產(chǎn)品,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  點(diǎn)積

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  在Tensors的每個(gè)元素上添加標(biāo)量,即廣播,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  從列表中創(chuàng)建二維Tensors,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  矩陣元素的切片和索引

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  矩陣乘法

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  矩陣轉(zhuǎn)置

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  矩陣逆和行列式

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  Autograd:自動(dòng)區(qū)分
 

  神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和預(yù)測(cè)涉及一遍又一遍地獲取各種函數(shù)(Tensors值)的導(dǎo)數(shù)。Tensor對(duì)象支持神奇的Autograd功能,即自動(dòng)微分,這是通過跟蹤和存儲(chǔ)在流過網(wǎng)絡(luò)的Tensors上執(zhí)行的所有操作來實(shí)現(xiàn)的。您可以觀看以下精彩的教程視頻以進(jìn)行直觀說明:
 

  Pytorch autograd 官方文檔在這里。
 

  我們展示了一些簡(jiǎn)單的示例來說明PyTorch的autograd功能。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們定義一個(gè)泛型函數(shù)和一個(gè)Tensors變量 x,然后定義另一個(gè)變量 y, 將其分配給x的函數(shù) 。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  然后,我們 在y上使用特殊的 向后()方法 獲取導(dǎo)數(shù),并在給定的x值下計(jì)算導(dǎo)數(shù) 。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們還可以處理偏導(dǎo)數(shù)!

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們可以將u 和 v定義為Tensors變量,定義將它們組合在一起的函數(shù),應(yīng)用反向方法,并計(jì)算偏導(dǎo)數(shù)。見下文,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  PyTorch僅計(jì)算標(biāo)量函數(shù)的導(dǎo)數(shù),但是如果我們傳遞矢量,則本質(zhì)上它將按元素計(jì)算導(dǎo)數(shù)并將它們存儲(chǔ)在相同維數(shù)的數(shù)組中。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  以下代碼將針對(duì)三個(gè)組成矢量計(jì)算導(dǎo)數(shù)。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們可以顯示導(dǎo)數(shù)的圖。注意,二次函數(shù)的導(dǎo)數(shù)是與拋物線曲線相切的直線。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  建立完整的神經(jīng)網(wǎng)絡(luò)
 

  除了Tensors和自動(dòng)微分能力之外,PyTorch的其他核心組件/功能很少,可以對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行深入定義。
 

  用于構(gòu)建神經(jīng)分類器的PyTorch的核心組件是,
 

  1) Tensors (在PyTorch中央數(shù)據(jù)結(jié)構(gòu))

  2)Tensor 的 Autograd功能(自動(dòng)微分公式烘焙到

  3)nn.Module 用來建立任何其他神經(jīng)分類類類

  4)優(yōu)化器 (當(dāng)然,也有很多可供選擇)

  5)損失 函數(shù)(一個(gè)大的選擇是供你選擇)
 

  我們已經(jīng)詳細(xì)描述了Tensor和Autograd。讓我們快速討論其他組件,
 

  nn.Module類
 

  在PyTorch中,我們通過將其定義為自定義類來構(gòu)建神經(jīng)網(wǎng)絡(luò)。但是,此類不是從本地Python對(duì)象派生的,而是從nn.Module類繼承的 。這為神經(jīng)網(wǎng)絡(luò)類注入了有用的屬性和強(qiáng)大的方法。這樣,在使用神經(jīng)網(wǎng)絡(luò)模型時(shí),可以保持面向?qū)ο缶幊?OOP)的全部功能。我們將在大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程中看到此類定義的完整示例。
 

  損失函數(shù)
 

  在神經(jīng)網(wǎng)絡(luò)的架構(gòu)和操作中,損失函數(shù)定義了神經(jīng)網(wǎng)絡(luò)的最終預(yù)測(cè)與地面真實(shí)情況(給定標(biāo)簽/類或用于監(jiān)督訓(xùn)練的數(shù)據(jù))之間的距離。損失的定量度量有助于使網(wǎng)絡(luò)更接近配置(神經(jīng)元權(quán)重的最佳設(shè)置),從而最好地對(duì)給定的數(shù)據(jù)集進(jìn)行分類或預(yù)測(cè)總誤差最小的數(shù)值輸出。
 

  PyTorch提供了用于分類和回歸任務(wù)的所有常見損失函數(shù)-
 

  1)二元和多類交叉熵,

  2)均方根和絕對(duì)絕對(duì)誤差,

  3)L1損失平穩(wěn)

  4)對(duì)數(shù)似然損失,甚至

  5)Kullback-Leibler分歧。
 

  可以在大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程中找到有關(guān)這些內(nèi)容的詳細(xì)討論。
 

  優(yōu)化器
 

  權(quán)重的優(yōu)化以實(shí)現(xiàn)最低的損失是用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的反向傳播算法的核心。PyTorch通過torch.optim模塊提供了許多優(yōu)化器來完成這項(xiàng)工作-
 

  1)隨機(jī)梯度下降(SGD),

  2)亞當(dāng),阿達(dá)德塔,阿達(dá)格勒,SpareAdam,

  3)L-BFGS,

  4)RMSprop等
 

  查看大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程以了解更多有關(guān)現(xiàn)代深度神經(jīng)網(wǎng)絡(luò)中使用的激活函數(shù)和優(yōu)化器的信息。
 

  五步法
 

  使用這些組件,我們將通過五個(gè)簡(jiǎn)單的步驟構(gòu)建分類器,
 

  1)將神經(jīng)網(wǎng)絡(luò)構(gòu)造為自定義類(繼承自 nn.Module 類),其中包含隱藏層Tensors以及用于通過各種層和激活函數(shù)傳播輸入Tensors的正向方法

  2)使用forward() 方法在網(wǎng)絡(luò)中傳播特征Tensors(從數(shù)據(jù)集中) -說我們得到一個(gè)輸出Tensors

  3)通過將輸出與地面真實(shí)情況進(jìn)行比較并使用內(nèi)置損耗函數(shù)來計(jì)算損耗

  4)使用自動(dòng)微分能力(Autograd)和向后方法傳播損失的梯度

  5)使用損耗的梯度來更新網(wǎng)絡(luò)的權(quán)重-這是通過執(zhí)行所謂的優(yōu)化器-optimizer.step()的一個(gè)步驟來完成的。
 

  就是這樣。這個(gè)五步過程構(gòu)成了 一個(gè)完整的培訓(xùn)時(shí)期。我們只重復(fù)一遍,以降低損失并獲得較高的分類精度。
 

  這個(gè)主意如下:

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  動(dòng)手實(shí)例
 

  假設(shè)我們要構(gòu)建和訓(xùn)練以下2層神經(jīng)網(wǎng)絡(luò)。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們從類定義開始,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們可以將變量定義為屬于此類的對(duì)象,然后打印摘要。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們選擇二進(jìn)制交叉熵?fù)p失,

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  讓我們通過已定義的神經(jīng)網(wǎng)絡(luò)模型運(yùn)行輸入數(shù)據(jù)集,即 一次向前通過并計(jì)算輸出概率。由于權(quán)重已初始化為隨機(jī),因此我們將看到隨機(jī)輸出概率(大多數(shù)接近0.5)。 該網(wǎng)絡(luò)尚未訓(xùn)練。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  我們定義優(yōu)化器

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  接下來,我們展示如何使用優(yōu)化程序的一個(gè)步驟進(jìn)行正向和反向傳遞。 可以在任何PyTorch神經(jīng)網(wǎng)絡(luò)模型的核心找到這組代碼。我們遵循另外五個(gè)步驟
 

  1)將漸變重置為零(以防止?jié)u變累積)

  2)將Tensors向前穿過層

  3)計(jì)算損失Tensors

  4)計(jì)算損失的梯度

  5)通過將優(yōu)化器增加一級(jí)(沿負(fù)梯度的方向)來更新權(quán)重
 

  上面的五個(gè)步驟 正是您在有關(guān)神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的所有理論討論中(以及在教科書中)可以觀察和了解的。而且,借助PyTorch,您可以逐步使用看似簡(jiǎn)單的代碼來實(shí)現(xiàn)此過程。
 

  代碼如下所示

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  當(dāng) 我們?cè)谝粋€(gè)循環(huán)上(對(duì)于多個(gè)時(shí)期)運(yùn)行相同類型的代碼時(shí),我們可以觀察到熟悉的損耗曲線下降,即神經(jīng)網(wǎng)絡(luò)逐漸受到訓(xùn)練。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  在訓(xùn)練了200個(gè)時(shí)期之后,我們可以再次直接查看概率分布,以查看神經(jīng)網(wǎng)絡(luò)輸出概率現(xiàn)在有何不同(嘗試與真實(shí)數(shù)據(jù)分布匹配)。

大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程
 

  PyTorch基礎(chǔ)知識(shí)摘要
 

  PyTorch是一個(gè)很好的軟件包,可用于深入神經(jīng)網(wǎng)絡(luò)的核心并針對(duì)您的應(yīng)用對(duì)其進(jìn)行自定義,或者嘗試使用網(wǎng)絡(luò)的體系結(jié)構(gòu),優(yōu)化和機(jī)制來嘗試大膽的新想法。
 

  您可以輕松地構(gòu)建復(fù)雜的互連網(wǎng)絡(luò),嘗試新穎的激活函數(shù),混合并匹配自定義損失函數(shù)等。計(jì)算圖,輕松的自動(dòng)微分以及Tensors的正向和反向流動(dòng)的核心思想將對(duì)您的任何人都很方便神經(jīng)網(wǎng)絡(luò)定義和優(yōu)化。
 

  在大數(shù)據(jù)分析PyTorchx深度學(xué)習(xí)框架教程中,我們總結(jié)了一些關(guān)鍵步驟,可以遵循這些關(guān)鍵步驟來快速構(gòu)建用于分類或回歸任務(wù)的神經(jīng)網(wǎng)絡(luò)。我們還展示了如何使用此框架輕松地嘗試巧妙的想法。



 

預(yù)約申請(qǐng)免費(fèi)試聽課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動(dòng)者教育科技有限公司版權(quán)所有
備案號(hào):京ICP備12034770號(hào)

?2007-2022/ 5wd995.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號(hào)

網(wǎng)站地圖