简述PyTorch
文章目錄
- 簡述PyTorch
- Pytorch的安裝
- PyTorch包的結(jié)構(gòu)
- PyTorch的主要模塊
- 1.torch模塊
- 2.torch.Tensor模塊
- 3.torch.sparse模塊
- 4.torch.cuda模塊
- 5.torch.nn模塊
- 6.torch.nn.functional函數(shù)模塊
- 7.torch.nn.init模塊
- 8.torch.optim模塊
- 9.torch.autograd模塊
- 10.torch.distributed模塊
- 11.torch.distributions模塊
- 12.torch.hub模塊
- 13.torch.jit模塊
- 14.torch.multiprocessing模塊
- 15.torch.random模塊
- 16.torch.onnx模塊
- PyTorch的輔助工具模塊
- 1.torch.utils.bottleneck模塊
- 2.torch.utils.checkpoint模塊
- 3.torch.utils.cpp_extension模塊
- 4.torch.utils.data模塊
- 5.torch.utils.dlpacl模塊
- 6.torch.utils.tensorboard模塊
簡述PyTorch
Pytorch的安裝
為了能夠使用PyTorch,首先需要有Python的運(yùn)行環(huán)境,一般來說推薦選擇Anaconda的Python環(huán)境。
進(jìn)入Anaconda官網(wǎng)針對操作系統(tǒng)和Python版本選擇不同的Anaconda安裝包下載安裝。
安裝好Anaconda后就可以使用conda命令了,這也是Anaconda的Python環(huán)境管理命令。Windows系統(tǒng)可以打開Anaconda Prompt,在命令行界面運(yùn)行conda --help,來查看Anaconda的幫助文件。
在安裝好Anaconda后可以創(chuàng)建一個虛擬環(huán)境,具體的命令為conda create -n XXX python=3.7。第一個參數(shù)是-n,后面緊跟著虛擬環(huán)境的名字,另一個參數(shù)指定Python的版本。Anaconda會自動安裝好初始的依賴并設(shè)置好具體的環(huán)境變量。創(chuàng)建好環(huán)境后可以使用conda activate XXX來激活創(chuàng)建好的虛擬環(huán)境。
在激活虛擬環(huán)境后,安裝Pytorch包。
在使用GPU運(yùn)行環(huán)境的情況下,使用命令conda install pytorch torchvision cudatoolkit=10.0 -c pytorch安裝;在僅使用CPU的情況下,通過命令conda install pytorch torchvision -c pytorch來安裝。安裝好后使用下面的命令測試PyTorch是否被正確安裝。
PyTorch包的結(jié)構(gòu)
PyTorch的主要模塊
1.torch模塊
torch模塊本身包含了PyTorh經(jīng)常使用的一些激活函數(shù)以及PyTorch張量的操作。
例如torch.sigmoid、torch.relu、torch.tanh以及torch.mm、torch.select、torch.zeros、torch.randn等。
2.torch.Tensor模塊
這一模塊定義了torch中的張量類型,包括不同的數(shù)值類型以及一定的維數(shù)和形狀,同時也包含一些方法返回新的張量或者更改當(dāng)前的張量。
值得注意的是如果張量的某個類方法會返回張量,如果張量方法后綴帶下劃線,則該方法會修改張量本身的數(shù)據(jù),反之則會返回新的張量。 例如Tensor.add會讓當(dāng)前張量和輸入?yún)?shù)張量做加法,返回新的張量;而Tensor.add_會改變當(dāng)前張量的值,新的值為舊的值和輸入?yún)?shù)之和。
3.torch.sparse模塊
該模塊定義了稀疏張量,用一個長整型定義非零元素的位置,用浮點數(shù)張量定義對應(yīng)非零元素的值。稀疏張量之間可以做元素加、減、乘、除運(yùn)算和矩陣乘法。
4.torch.cuda模塊
該模塊定義了與CUDA運(yùn)算相關(guān)的一系列函數(shù)。
5.torch.nn模塊
這是一個非常重要的模塊,是PyTorch神經(jīng)網(wǎng)絡(luò)模塊化的核心。這個模塊定義了一系列模塊,包括卷積層nn.ConvNd(N=1,2,3)和線性層nn.Linear等。
當(dāng)構(gòu)建深度學(xué)習(xí)模型時,可以通過繼承nn.Module類并重寫forward方法來實現(xiàn)一個新的神經(jīng)網(wǎng)絡(luò)。
另外torch.nn中也定義了一系列的損失函數(shù),包括平方損失函數(shù)torch.nn.MSELoss、交叉熵?fù)p失函數(shù)torch.nn.CrossEntropyLoss等。
6.torch.nn.functional函數(shù)模塊
該模塊定義了一些和神經(jīng)網(wǎng)絡(luò)相關(guān)的函數(shù),包括卷積函數(shù)和池化函數(shù)等。
7.torch.nn.init模塊
該模塊定義了神經(jīng)網(wǎng)絡(luò)權(quán)重的初始化,包括均勻初始化torch.nn.init.uniform_、正態(tài)分布?xì)w一化torch.nn.init.normal_等。和前文所述一致,這些函數(shù)或方法如果以下劃線結(jié)尾則會直接改變作用張量的值,返回改變后的張量。
8.torch.optim模塊
該模塊定義了一系列優(yōu)化器、學(xué)習(xí)率衰減算法的子模塊等。
9.torch.autograd模塊
該模塊是PyTorch的自動微分算法模塊,定義了一系列自動微分函數(shù),包括torch.autograd.backward函數(shù)用于在求得損失函數(shù)之后進(jìn)行反向梯度傳播、torch.autograd.grad用于一個標(biāo)量張量對另一個張量求導(dǎo)以及在代碼中設(shè)置不參與求導(dǎo)的部分等。
10.torch.distributed模塊
該模塊是PyTorch的分布式計算模塊提供并行運(yùn)行環(huán)境。
11.torch.distributions模塊
該模塊提供了一系列類使得PyTorch能夠?qū)Σ煌姆植际竭M(jìn)行采樣并且生成概率采樣過程的計算圖。
12.torch.hub模塊
該模塊提供了一系列預(yù)訓(xùn)練的模型供用戶使用。
13.torch.jit模塊
這一模塊是PyTorch的即時編譯器模塊,可以將動態(tài)度轉(zhuǎn)化為可以優(yōu)化和序列化的靜態(tài)圖,通過預(yù)先定義好的張量追蹤整個動態(tài)圖的構(gòu)建過程,得到最終構(gòu)建出來的動態(tài)圖,然后轉(zhuǎn)換為靜態(tài)圖。
14.torch.multiprocessing模塊
該模塊定義了多進(jìn)程API,可以啟用不同的進(jìn)程,每個進(jìn)程運(yùn)行不同的深度學(xué)習(xí)模型,并且能夠在進(jìn)程間共享張量。
15.torch.random模塊
這一模塊提供了一系列方法來保存和設(shè)置隨機(jī)數(shù)生成器的狀態(tài),包括使用get_rng_state獲取當(dāng)前隨機(jī)數(shù)生成器狀態(tài)、set_rng_state設(shè)置當(dāng)前隨機(jī)數(shù)生成器狀態(tài)、manual_seed設(shè)置隨機(jī)種子等。
16.torch.onnx模塊
該模塊定義了導(dǎo)出和載入ONNX格式的深度學(xué)習(xí)模型描述文件。
PyTorch的輔助工具模塊
torch.utils提供了一系列的工具幫助神經(jīng)網(wǎng)絡(luò)的訓(xùn)練、測試和結(jié)構(gòu)優(yōu)化,主要包括以下6個子模塊:
1.torch.utils.bottleneck模塊
這一模塊用來檢查深度學(xué)習(xí)模型中模塊的運(yùn)行時間,從而找到導(dǎo)致性能瓶頸的那些模塊,通過優(yōu)化這些模塊的運(yùn)行時間從而優(yōu)化整個深度學(xué)習(xí)模型的性能。
2.torch.utils.checkpoint模塊
這一模塊可以用來節(jié)約深度學(xué)習(xí)使用的內(nèi)存。因為要進(jìn)行梯度反向傳播,在構(gòu)建計算圖的時候需要保存中間數(shù)據(jù),而這些數(shù)據(jù)大大增加了深度學(xué)習(xí)的內(nèi)存消耗。為了減少內(nèi)存消耗,讓Mini-batch的大小提高,從而提升深度學(xué)習(xí)模型的性能和優(yōu)化時的穩(wěn)定性,可以使用這個模塊來記錄中間數(shù)據(jù)的計算過程。
3.torch.utils.cpp_extension模塊
這一模塊定義了C++擴(kuò)展,包含CppExtension和CUDAExtension兩個類。
4.torch.utils.data模塊
這一模塊引入了數(shù)據(jù)集和數(shù)據(jù)加載器的概念,前者代表了包含所有數(shù)據(jù)的數(shù)據(jù)集,通過索引能夠得到某一條特定的數(shù)據(jù),后者通過對數(shù)據(jù)集的包裝,可以對數(shù)據(jù)集進(jìn)行隨機(jī)Shuffle和Sample,得到一系列打亂數(shù)據(jù)順序的Mini-batch。
5.torch.utils.dlpacl模塊
該模塊定義了PyTorch張量和DLPack張量存儲格式之間的轉(zhuǎn)換,用于不同框架之間張量數(shù)據(jù)的交換。
6.torch.utils.tensorboard模塊
這一模塊是對TensorBoard數(shù)據(jù)可視化工具的支持,有了這一模塊在訓(xùn)練過程中可以很方便的觀察中間輸出的張量,也可以方便地調(diào)試深度學(xué)習(xí)模型。
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 算法分析与设计——分治法最近点对
- 下一篇: PyTorch模块类