深度学习导论(3)PyTorch基础
深度學習導論(3)PyTorch基礎
- 一. Tensor-Pytorch基礎數據結構
- 二. Tensor索引及操作
- 1. Tensor索引類型
- 2. Tensor基礎操作
- 3. 數值類型
- 4. 數值類型操作
- 三. Tensor與Numpy的互操作
- 1. 小案例
- 2. 序列化Tensor-torch方式
- 3. 序列化Tensor-h5py方式
- 四. Tensor on GPU
- 五. Tensor operations
- 1. Tensor reshaping(變形操作,非常重要)
- 2. Broadcasting(廣播)
- 3. Tensor product(乘法運算)
- 4. 自動求導
介紹了PyTorch基礎,包括以下內容:一. Tensor-Pytorch基礎數據結構; 二. Tensor索引及操作; 三. Tensor與Numpy的互操作; 四. Tensor on GPU; 五. Tensor operations
一. Tensor-Pytorch基礎數據結構
可以把Tensor理解為多維數組
深度學習任務: 將數據從分階段從一種形式轉換成另一種形式(用浮點數表示)。
深度學習小例子:
如圖所示,圖片中有大海和太陽,圖片的原始形態實際上就是對像素的采樣出來的一個矩陣,在這個矩陣中,每個元素都是[0, 255]的像素值(機器學習或者深度學習中一般將將其浮點數化,即將其變為[0, 1]或者[-1, 1])。將這張圖片放入神經網絡中,結果出來的OUTPUT為一個矩陣Softmax,矩陣中的向量值范圍為[0, 1]。其中每個向量代表著對應標簽的概率值,例如“太陽”、“海邊”、“風景”等等。從以上例子可以看出,深度學習其實就是根據樣本評判標簽的過程。
二. Tensor索引及操作
1. Tensor索引類型
(1) Scalar
稱為0維的Tensor。如上圖所示,“3”就是一個標量。
(2) Vector
稱為1維的Tensor。如上圖所示,X[2]代表Vector中第3個元素,即“5”。
(3) Matrix
稱為2維的Tensor。如上圖所示,X[1, 0]代表Matrix中第3行第1列的元素,即“7”。
(4) 3-D Tensor
可以將其理解為將多個向量“摞”起來。如上圖所示,X[0, 2, 1]代表3-D Tensor中第1個矩陣的第3行第2列的元素,即“5”。(注: 對于不同的任務,怎么表示是由自己定義的,例如X[0, 2, 1]也可以代表3-D Tensor中第1個矩陣的寬度為3,高度為2的元素,即“3”。)
(5) 多維Tensor
多維的Tensor。如上圖所示,X[…]代表從最外圍的一層一直延伸到最里邊一層的元素。
注:Tensor與List(Tuple)的區別:
- List(Tuple): 在內存中單獨分配的對象集合;
- Tensor: 將向量和矩陣推廣到任意維度,也可以理解為多維數組。在內存中連續存儲的一組元素(非對象);
- 一些操作如dot,mul等不能針對list進行。
如: 一個包括100萬個浮點數的一維Tensor需要存儲400萬個連續字節,加上少量元數據(維度、數字類型等)的開銷。
2. Tensor基礎操作
查看conda環境有哪些:
conda env list在圖形界面啟動Jupyter Notebook
(1) 生成一個每個元素都為1的矩陣
(2) 生成一個三行三列的矩向量
(3) Scalar(0-D Tensors): 0維的Tensor
(4) Vectors(1-D Tensors): 1維的Tensor,即向量的形式
(5) Matrix(2-D Tensors): 2維的Tensor,即矩陣的形式
(6) 4-D & 5-D Tensors
注:
- 4-D舉例: 642242243: 其中224224表示的是圖像的寬和高,3表示的是RGB圖像的通道數,64代表每個批次的樣本數(往模型當中送數據時,并不是一個一個往里送,而是分批次往里送,即一個batch一個batch往里送,一個batch可能是32個、64個、256個或者1024個樣本)。
- 5-D Tensors: 視頻,多了一個“幀”的維度。首先是最外邊的維度“batch”,即每個批次的樣本數; 然后是“t”,即幀; 然后是“h”和“w”,即圖像的高和寬然后是“c”,即通道數。即 [batch, t, h, w, c]。
3. 數值類型
(1) 32位浮點型
torch.float32 or torch.float——32-bit floating-point
(2) 64位浮點型
torch.float64 or torch.double——64-bit, double-precision floating-point
(3) 16位浮點型
torch.float16 or torch.half——16-bit, half-precision floating-point
(4) 8位整型(有符號)
torch.int8——Signed 8-bit integers
(5) 8位整型(有符號)
torch.uint8——Unsigned 8-bit integers
(6) 16位整型(無有符號)
torch.int16 or torch.short——Signed 16-bit integers
(7) 32位整型(有符號)
torch.int32 or torch.int——Signed 32-bit integers
(8) 64位整型(有符號)
torch.int64 or torch.long——Signed 64-bit integers
4. 數值類型操作
(1) 使用dtype指定數值類型
(2) 使用dtype獲取數值類型
(3) 數值類型轉換
(4) to方法
(5) type方法
(1) 取出所有元素
(2) 取出第2~4個元素
注: 切片操作為左閉右開
(3) 取出第2~最后一個元素
(4) 取出第一~第4個元素
(5) 取出第一個~倒數第二個元素
(6) 取出第2~4個元素,步長為2(隔一個一取)
三. Tensor與Numpy的互操作
1. 小案例
(1) 導入大熊貓圖片,并查看size
(2) 取出第0個通道,并轉換成numpy的形式
(3) 局部截取(切片操作),高: 25~175; 寬: 60,130; 第0個通道切片
2. 序列化Tensor-torch方式
注: PyTorch使用pickle序列化Tensors對象,存儲的文件其它應用無法使用。
3. 序列化Tensor-h5py方式
注: 序列化成為h5py形式的數據時,任何類型的框架或者方法都可以讀,但是只能用Tensor或者PyTorch來存儲或者打開。
四. Tensor on GPU
五. Tensor operations
- Tensor reshaping
- Broadcasting
- Tensor product
注: 神經網絡完全由Tensor operations組成
1. Tensor reshaping(變形操作,非常重要)
注: view(1, -1),其中前面的“1”表示將其變為1行,后面的“-1”表示如果不知道有幾列,那么直接用“-1”代替即可,相當于“b = a.view(1, 6)”。
2. Broadcasting(廣播)
3. Tensor product(乘法運算)
- torch.dot: 向量點積(只能用于一維的向量)。
- torch.mul: element product(相當于直接使用“*”)。
- torch.mm: 按照矩陣乘法規則運算(相乘的兩個元素需要滿足一定的維度(size)要求)。
- torch.matmul: torch.mm的broadcasting版本。
(1) torch.dot
- 上圖中“a*b”即為dot操作,即點積操作。
(2) torch.mul
注: a被定義完是Python中List的形式,所以必須要轉換成Tensor的形式
(3) torch.mm
(4) torch.matmul
4. 自動求導
(1) requires_grad
- 如果將Tensor的.require_grad屬性設置成True,則將會跟蹤對該Tensor的所有操作,計算結束以后調用.backward()將會自動計算所有梯度。該Tensor的梯度將會累積到.grad屬性中。
- 如果不想跟蹤對Tensor的操作,可以將代碼塊封裝到“with torch.no_grad()”中,如在測試過程中不需要計算梯度。
(2) grad_fn
- 該屬性指向創建該Tensor的函數。
(3) backward()
注: 調用該方法計算梯度,如果Tensor為標量,則該方法不需要參數,如果Tensor為向量,則該方法需要一個tensor作為參數。
總結
以上是生活随笔為你收集整理的深度学习导论(3)PyTorch基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习导论(2)深度学习案例:回归问题
- 下一篇: 消息称 Meta 向管理人员下“最后通牒