PyTorch 主要有以下幾個基礎概念:張量(Tensor)、自動求導(Autograd)、神經網絡模塊(nn.Module)、優化器(optim)等。
張量(Tensor):PyTorch 的核心數據結構,支持多維數組,并可以在 CPU 或 GPU 上進行加速計算。
自動求導(Autograd):PyTorch 提供了自動求導功能,可以輕松計算模型的梯度,便于進行反向傳播和優化。
神經網絡(nn.Module):PyTorch 提供了簡單且強大的 API 來構建神經網絡模型,可以方便地進行前向傳播和模型定義。
優化器(Optimizers):使用優化器(如 Adam、SGD 等)來更新模型的參數,使得損失最小化。
設備(Device):可以將模型和張量移動到 GPU 上以加速計算。
張量(Tensor)
張量(Tensor)是 PyTorch 中的核心數據結構,用于存儲和操作多維數組。張量可以視為一個多維數組,支持加速計算的操作。
維度(Dimensionality):張量的維度指的是數據的多維數組結構。例如,一個標量(0維張量)是一個單獨的數字,一個向量(1維張量)是一個一維數組,一個矩陣(2維張量)是一個二維數組,以此類推。
形狀(Shape):張量的形狀是指每個維度上的大小。例如,一個形狀為
(3, 4)
的張量意味著它有3行4列。數據類型(Dtype):張量中的數據類型定義了存儲每個元素所需的內存大小和解釋方式。PyTorch支持多種數據類型,包括整數型(如
torch.int8
、torch.int32
)、浮點型(如torch.float32
、torch.float64
)和布爾型(torch.bool
)。
張量創建
import torch
import numpy as np# 創建張量2x3的全0張量
a = torch.zeros(2, 3)
print("\n創建張量2x3的全0張量:")
print(a)# 創建張量2x3的全1張量
b = torch.ones(2, 3)
print("\n創建張量2x3的全1張量:")
print(b)# 創建張量2x3的隨機數張量
c = torch.rand(2, 3)
print("\n創建張量2x3的隨機數張量:")
print(c)# 從Numpy數組創建張量
numpy_array = np.array([[1,2],[3,4]])
tensor_d = torch.from_numpy(numpy_array)
print("\n從Numpy數組創建張量:")
print(tensor_d)# 在指定device(CPU, GPU)上創建張量
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
e = torch.rand(2, 3).to(device)
print("\n在指定device(CPU, GPU)上創建張量:")
print(e)
創建結果:
張量運算
import torch
import numpy as npaa = torch.rand(2, 3)
print(aa)
bb = torch.rand(3, 4)
print(bb)
dd = torch.rand(2, 3)
print(dd)print("\n aa+dd:") #加減法的時候張量要一樣大小
print(aa + dd)print("\n aa-dd:")
print(aa - dd)print("\n aa*dd:")
print(aa * dd)cc = torch.rand(2, 3)
print("\n cc:")
print(cc)
print("\n cc 維度調換:")
print(cc.t()) # 等同于cc.transpose(0, 1)print("\n cc shape:")
print(cc.shape)print("\n aa*bb:")
print(aa * bb)
運算結果, 注意兩個張量維度要一致