一、torch概念
1.1簡介
? ? ? ? pytorch簡稱torch,意為深度學習框架。它使用張量(tensor)來表示數據,可以輕松地處理大規模數據集,且可以在GPU上加速。
? ? ? ? pytorch基本功能:自動微分、自動求導等。
1.2安裝
? ? ? ? 官網獲得下載命令。
二、tensor概述
pytorch將數據封裝成張量進行計算。
2.1概念
? ? ? ? 張量:元素類型相同的多維矩陣,可以在GPU上于運行。
? ? ? ? 張量的維度決定了它的形狀:
(1)0維張量:標量;
(2)1維張量:向量、數組;
(3)2維張量:矩陣;
(4)更高維度張量:圖像、視頻等。
2.2特點
(1)動態計算圖;
(2)GPU支持;
(3)自動微分。
2.3數據類型
? ? ? ? 主要數據類型:浮點數float,整數int,布爾值True、False。
????????其中,浮點數和整數又分為8位、16位、32位、64位,加起來共9種。
三、tensor創建
3.1基本創建方式
(1)torch.tensor()
? ? ? ? 注意tensor為小寫,根據指定的數據創建張量。
代碼示例:
# 指定數據進行創建 torch.tensor
import torch
import numpy as np
# 用標量創建張量
data = torch.tensor(7) #0維張量
print(data)
print(data.shape)
結果:
tensor(7)
torch.Size([])
(2)torch.Tensor()
???????? 注意tensor為大寫,根據形狀創建張量,也可用指定的數據創建張量。
代碼示例:
# 指定形狀進行創建 torch.Tensor
def test01():tensor1 = torch.Tensor(3,4)print(tensor1)tensor2 = torch.Tensor([[1],[2],[3]])print(tensor2,tensor2.dtype)tensor3 = torch.Tensor([0])print(tensor3.shape,tensor3.dtype)tensor1 = torch.Tensor([1,2]).int()print(tensor1.dtype)if __name__ == '__main__':test01()
結果:
tensor([[-4.6947e-33, 1.9716e-42, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]])
tensor([[1.], [2.], [3.]]) torch.float32
torch.Size([1]) torch.float32
torch.int32
(3)torch.IntTensor()
? ? ? ? 用于創建指定類型的張量。
代碼示例:
# 指定類型進行創建 torch.IntTensor
data = torch.IntTensor(3,3)
print(data)
print(data.shape,data.dtype)
結果:
tensor([[-1983708176, 1407, 0],
[ 0, 0, 0],
[ 0, 0, 0]], dtype=torch.int32)
torch.Size([3, 3]) torch.int32
3.2創建線性張量
? ? ? ? 利用API:
????????torch.arange():PyTorch 中用于生成一個一維張量(向量)的函數,該張量包含從起始點到結束點(不包括結束點)的等間隔數值序列。
? ? ? ? torch.linspace((start,end,steps)):返回一個一維張量,包含在區間 `[start, end]` 上均勻間隔的 `steps` 個點。
代碼示例:
# 創建線性張量
import torch
def tensor():data = torch.arange(0,9,2)print(data,data.shape,data.dtype)data1 = torch.linspace(1,10,3)print(data1,data1.shape,data1.dtype)tensor()
結果:
tensor([0, 2, 4, 6, 8]) torch.Size([5]) torch.int64
tensor([ 1.0000, 5.5000, 10.0000]) torch.Size([3]) torch.float32
3.3創建隨機張量
隨機數種子:torch.manual_seed()
獲取隨機數種子:torch.initial_seed()
創建隨機張量:torch.rand--均勻分布?/ torch.randn--正態分布
代碼示例:
# 創建隨機張量
import numpy as np
def random_t():torch.manual_seed(33)print(torch.initial_seed())data = torch.rand(3,4)data2 = torch.randn(2,3).int()print(data,data.shape,data.dtype)print(data2,data2.shape,data2.dtype)return
random_t()
結果:
33
tensor([[0.6186, 0.5587, 0.1937, 0.3360],
????????????[0.2008, 0.6970, 0.6367, 0.1452],
????????????[0.8213, 0.2365, 0.3702, 0.9168]]) torch.Size([3, 4]) torch.float32
tensor([[ 0, 0, -1],
????????????[ 0, -1, 1]], dtype=torch.int32) torch.Size([2, 3]) torch.int32
四、tensor常見屬性
4.1獲取屬性
? ? ? ? Tensor張量常見屬性有三個:dtype(獲取類型),shape(獲取形狀),device(獲取運行設備)
代碼示例:
import torch
import numpy as np
data = torch.tensor(np.random.randint(0,10,(2,2)))
print(data)
print(data.shape)
print(data.dtype)
print(data.device)
結果:
tensor([[4, 4], [6, 5]], dtype=torch.int32)
torch.Size([2, 2])
torch.int32
cpu
4.2切換設備
主要是指CPU,GPU之間的相互轉換。
注意:這里都要重新賦值
(1)直接data.cuda()
(2)在創建張量時指定device類型
(3)重新賦值data.to(device)
代碼示例:
# 切換設備
import torch
import numpy as np
data = torch.tensor(np.random.randint(0,10,(2,2)))
print(data)
print(data.shape)
print(data.dtype)
print(data.device)device = 'cuda' if torch.cuda.is_available() else 'cpu'
data_new = data.to(device=device)
print(data_new.device)data2 = torch.tensor([1,2,3],device='cpu')
print(data2.device)data3 = torch.tensor([1,2,3],dtype=torch.float32)
data3_new = data3.cuda()
print(data3_new.device)
結果:
tensor([[4, 6], [5, 8]], dtype=torch.int32)
torch.Size([2, 2])
torch.int32
cpu
cpu
cpu
Torch not compiled with CUDA enabled(這里是因為我沒有安裝GPU)
4.3類型轉換
(1)使用type進行轉換,在type()括號內填上需要轉換為的目標類型;
(2)重新賦值 data = data.int()
(3)創建張量時指定類型 dtype= torch.int64
代碼示例:
# 類型轉換
import torch
import numpy as npdata = torch.tensor(np.random.randn(3,4),dtype=torch.int64)
print(data,data.dtype)data2 = torch.tensor([[1,2],[3,4]])
data2 = data2.float()
print(data2,data2.dtype)data3 = torch.tensor([8,9,0])
data3 = data3.type(torch.bool)
print(data3,data3.dtype)
結果:
tensor([[ 0, 0, 0, -2], [ 0, 1, 0, -1], [ 1, 0, 0, 0]]) torch.int64
tensor([[1., 2.], [3., 4.]]) torch.float32
tensor([ True, True, False]) torch.bool
五、小結
? ? ? ? 綜上,簡單學習了張量的創建以及張量相關屬性的獲取,數據類型的修改方式。都是一些簡單的基本操作,但是對于不熟的代碼還是要勤加練習。