第二章 PyTorch 核心模組

在第一章中,對PyTorch框架進行了全面的介紹,從它的起源、特性到安裝和基本使用。現在,我們已經為深入探索PyTorch的核心模組做好了準備。第二章將帶領讀者深入瞭解PyTorch核心——它的資料結構、自動求導機制以及如何構建和訓練神經網路模型。

本章內容預告

2.1 PyTorch 模組結構

首先,我們將探索PyTorch的模組結構,瞭解其代碼的組織方式和各個模組的功能。這不僅有助於我們更好地理解PyTorch的工作原理,還能幫助我們在後續的開發中快速定位和使用所需的功能。

2.2 新冠肺炎X光分類

通過一個與現實世界緊密相關的案例——新冠肺炎X光分類,我們將介紹PyTorch在實際深度學習項目中的應用。本小節將通過一個具體的專案流程,展示如何使用PyTorch構建資料載入、模型訓練和評估的完整工作流。

2.3 核心資料結構——Tensor

Tensor作為PyTorch中的核心資料結構,是理解和使用PyTorch的關鍵。本小節將詳細介紹Tensor的概念、屬性和操作。

2.4 張量的相關函數

在對Tensor有了基本瞭解之後,我們將學習張量的各種相關函數,包括它們的數學操作、隨機採樣、序列化等。這些函數是構建和操作神經網路模型的必備工具。

2.5 自動求導核心——計算圖

自動求導是深度學習框架的精髓。本小節將介紹計算圖的概念,它是自動求導系統的基石。通過計算圖,我們將能夠理解如何自動地計算神經網路中的梯度。

2.6 Autograd——自動微分

最後,我們將深入探討Autograd模組,它是PyTorch自動求導機制的實現。通過本小節的學習,我們將掌握如何利用Autograd進行複雜的梯度計算,從而優化神經網路模型。

 

2.1 PyTorch 模組結構

上一章安裝好的PyTorch是一個龐大的python庫,其中包含幾十個模組,這一小節就來瞭解模組的構成,模組代碼的位置,對應文檔的位置。從而幫助讀者具象化PyTorch,清楚地知道所用的PyTorch函數、模組都在哪裡,是如何調用的。

您的代碼位於何處?

很多開發者都用過pip/conda install 進行一鍵安裝,但可能不清楚工具庫代碼安裝在了哪裡。使用的時候只知道import *,但具體引用的功能函數又是如何實現的,是模糊的。

為了讓大家知道調用的是什麼,先來看安裝的pytorch在哪裡。上一章案例中,我們裝的pytorch在:D:\Anaconda_data\envs\pytorch_1.10_gpu\Lib\site-packages\torch

如果pycharm中配置好了虛擬環境,大家也可以通過pycharm的快速鍵,快速定位到這個資料夾。方法是,找到import torch這一行代碼,按住Ctrl鍵,滑鼠左鍵按一下torch,就可以跳轉到D:\Anacondadata\envs\pytorch1.10_gpu\Lib\site-packages\torch__init.py 文件。

 

 

<<AI人工智慧 PyTorch自學>> 第二章 PyTor

 

<<AI人工智慧 PyTorch自學>> 第二章 PyTor

可以看到torch資料夾中有一系列子資料夾,我們平時常用的函數都包含在這些子資料夾中,下面將重點介紹一些。

_pycache_

該資料夾存放python解譯器生成的位元組碼,尾碼通常為pyc/pyo。其目的是通過犧牲一定的存儲空間來提高載入速度,對應的模組直接讀取pyc檔,而不需再次將.py語言轉換為位元組碼的過程,從此節省了時間。

從資料夾名稱可知,它是一個緩存,如果需要,我們當然可以刪掉它。更多關於pycache的內容,建議額外閱讀:https://www.python.org/dev/peps/pep-3147/#proposal

_C

從資料夾名稱就知道它和C語言有關,其實它是輔助C語言代碼調用的一個模組,該資料夾裡存放了一系列pyi檔,pyi檔是python用來校驗資料類型的,如果調用資料類型不規範,會報錯。更多pyi知識,請查閱PEP 8 -->.pyi files that are read by the type checker in preference of the corresponding .py files.

PyTorch的底層計算代碼採用的是C++語言編寫,並封裝成庫,供pytorchpython語言進行調用。這一點非常重要,後續我們會發現一些pytorch函數無法跳轉到具體實現,這是因為具體的實現通過C++語言,我們無法在Pycharm中跳轉查看。

include

上面講到pytorch許多底層運算用的是C++代碼,那麼C++代碼在哪裡呢? 它們在這裡,torch/csrc資料夾下可以看到各個.h/.hpp檔,而在python庫中,只包含標頭檔,這些標頭檔就在include資料夾下。

lib

torch資料夾中最重要的一個模組,torch資料夾占3.2GB的空間,98%的內容都在lib中,占了3.16GB空間。pytorch的內容幾乎都在lib裡面,讓我們看看裡面是什麼。

lib資料夾下包含大量的.lib .dll檔(分別是靜態程式庫和動態連結程式庫),例如大名鼎鼎的cudnn64_7.dll(占435MB), torch_cuda.dll940MB)。這些底層庫都會被各類頂層python api調用。這裡推薦大家自行瞭解什麼是靜態程式庫和動態連結程式庫。

autograd

該模組是pytorch的核心模組與概念,它實現了梯度的自動求導,極大地簡化了深度學習研究者開發的工作量,開發人員只需編寫前向傳播代碼,反向傳播部分由autograd自動實現,再也不用手動去推導數學公式,然後編寫代碼了(很多朋友可能不知道,在早期的深度學習框架中是沒有這個功能的,例如caffe,它需要手動編寫反向傳播的公式代碼)

nn

相信這個模組是99%pytorch開發者使用頻率最高的模組,搭建網路的網路層就在nn.modules裡邊。nn.modules也將作為一章獨立展開。我們可以到D:\Anaconda_data\envs\pytorch_1.10_gpu\Lib\site-packages\torch\nn\modules裡面看看是否有你熟悉的網路層?

onnx

pytorch模型轉換到onnx模型表示的核心模組,進入資料夾可以看到大量的opset**.py 這裡留下一個問題,各版本opset是什麼意思?有什麼區別?

optim

優化模組,深度學習的學習過程,就是不斷的優化,而優化使用的方法函數,都暗藏在了optim資料夾中,進入該資料夾,可以看到熟悉的優化方法:“Adam”“SGD”“ASGD”等。以及非常重要的學習率調整模組,lr_scheduler.py。該模組也將採用獨立一章進行詳細剖析。

utils

utils是各種軟體工程中常見的資料夾,其中包含了各類常用工具,其中比較關鍵的是data資料夾,tensorboard資料夾,這些工具都將在後續章節詳細展開。第三章將展開data裡的dataloaderdataset等資料讀取相關的模組。

其他資料夾不再逐一介紹,讀者可以到官方文檔查看。

以上是torch庫,針對不同的應用方向,pytorch還提供了torchvision\torchtext\torchaudio等模組,本書重點對torchvision進行剖析,其它兩個模組類似。

torchvision

類似地,我們來到D:\Anaconda_data\envs\pytorch_1.10_gpu\Lib\site-packages\torchvision資料夾下看看有什麼模組。

datasets

這裡是官方為常用的資料集寫的資料讀取函數,例如常見的cifar, coco, mnist,svhn,voc都是有對應的函數支援,可以方便地使用輪子,同時也可以學習大牛們是如何寫dataset的。

models

這裡是寶藏庫,裡邊存放了經典的、可複現的、有訓練權重參數可下載的視覺模型,例如分類的alexnetdensenetefficientnetmobilenet-v1/2/3resnet等,分割模型、檢測模型、視頻任務模型、量化模型。這個庫中的模型實現,也是大家可以借鑒學習的好資料,可以模仿它們的代碼結構、函數、類的組織。

ops

視覺任務特殊的功能函數,例如檢測中用到的 roi_align, roi_poolboxes的生成,以及focal_loss實現,都在這裡邊有實現。

transforms

資料增強庫,相信99%的初學者用到的第一個視覺資料增強庫就是transforms了,transformspytorch自帶的圖像預處理、增強、轉換工具,可以滿足日常的需求。但無法滿足各類複雜場景,因此後續會介紹更強大的、更通用的、使用人數更多的資料增強庫——Albumentations

通過torchvision\transforms\transforms.py , 可以看到 torchvision包含了這些功能

__all__ = ["Compose", "ToTensor", "PILToTensor", "ConvertImageDtype", "ToPILImage", "Normalize", "Resize", "Scale",

           "CenterCrop", "Pad", "Lambda", "RandomApply", "RandomChoice", "RandomOrder", "RandomCrop",

           "RandomHorizontalFlip", "RandomVerticalFlip", "RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop",

           "LinearTransformation", "ColorJitter", "RandomRotation", "RandomAffine", "Grayscale", "RandomGrayscale",

           "RandomPerspective", "RandomErasing", "GaussianBlur", "InterpolationMode", "RandomInvert", "RandomPosterize",

           "RandomSolarize", "RandomAdjustSharpness", "RandomAutocontrast", "RandomEqualize"]

Copy

通過上面的內容,相信大家對所安裝的代碼結構有了清晰認識,也知道自己將調用的代碼函數都在哪裡,已經為下一步工作打好基礎,下一節我們極簡的代碼,完成第一個深度學習任務—— 新冠肺炎X光分類 。其目的在於搭建模型訓練框架,加深對各模組的理解,為後續對核心模組的講解打下基礎。

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 HCHUNGW 的頭像
    HCHUNGW

    HCHUNGW的部落格

    HCHUNGW 發表在 痞客邦 留言(0) 人氣()