PyTorch 是一個開源的機器學習庫,廣泛用於深度學習領域。在 PyTorch 中,張量(Tensor)是其核心概念之一。本章 PyTorch 教學將詳細介紹如何在 PyTorch 中創建和操作張量。
有關初階的張量,shape、軸、階、維度概念可以參考 這篇文章
運用python的list轉換成Pytorch 的張量
PyTorch 教學:建立張量
import torch
# 創建張量
a = torch.ones(2)
b = torch.zeros(5)
print(a[1].item())
print(float(a[1]))
輸出如下:
1.0
1.0
points = torch.tensor([[1., 2.], [3., 4.], [5., 6.]])
print(points[0])
輸出如下:
tensor([1., 2.])
指定張量的數據類型:
double = torch.ones(9, 9, dtype=torch.double) # 指定型別
print(double.dtype) # 檢查型別
輸出如下:
torch.float64
PyTorch轉置矩陣
points = torch.tensor([[1., 2.], [3., 4.], [5., 6.]])
points_t = points.t()
print(points_t)
輸出如下:
tensor([[1., 3., 5.],
[2., 4., 6.]])
PyTorch將張量轉移到 GPU 上
在 PyTorch 中,將張量轉移到 GPU 上可以大幅加速運算,特別是對於大型神經網絡。以下是如何將張量移至 GPU 上的範例:
import torch
# 檢查 GPU 是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 創建張量
x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0], device=device)
# 輸出張量所在裝置
print(x.device)
輸出如下:
cuda:0
在這個範例中,x 張量已被移至 GPU 上。讓我們繼續深入了解 PyTorch 張量的更多操作。
張量的形狀
每個張量都有一個形狀(shape),這代表了張量的維度。
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(tensor_example.shape)
輸出如下:
torch.Size([3, 3])
改變張量形狀
我們可以使用 view()
方法改變張量的形狀。
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
reshaped_tensor = tensor_example.view(9)
print(reshaped_tensor)
輸出如下:
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
張量的維度
張量的維度是指張量中包含元素的總數。
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(tensor_example.dim())
輸出如下:
3
張量的數據類型
在 PyTorch 中,張量的數據類型很重要。我們可以通過 dtype
屬性獲取張量的數據類型。
輸出如下:
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(tensor_example.dtype)
torch.int64
這些是你開始使用 PyTorch 張量時應該了解的一些基礎概念。 PyTorch 的張量提供了豐富的功能和方法,可用於各種深度學習任務,包括建立神經網絡和進行數據處理。
張量的計算
在 PyTorch 中,張量支持各種數學運算,如加法、減法、乘法和除法等。
# 張量加法
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x + y
print(z)
輸出如下:
tensor([5, 7, 9])
# 張量乘法
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x * y
print(z)
輸出如下:
tensor([ 4, 10, 18])
# 張量除法
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = y / x
print(z)
輸出如下:
tensor([4.0000, 2.5000, 2.0000])
# 張量指數運算
x = torch.tensor([1, 2, 3])
z = x ** 2
print(z)
輸出如下:
tensor([1, 4, 9])
# 張量的矩陣乘法
A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[2, 0], [1, 3]])
C = torch.matmul(A, B)
print(C)
輸出如下:
tensor([[ 4, 6],
[10, 12]])
張量的索引和切片
# 張量的索引
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(tensor_example[0, 1]) # 獲取第一行,第二列的元素
輸出如下:
tensor(2)
# 張量的切片
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(tensor_example[:2, :2]) # 獲取前兩行、前兩列的元素
輸出如下:
tensor([[1, 2],
[4, 5]])
張量的隨機初始化
# 創建隨機初始化的張量
random_tensor = torch.rand(2, 3)
print(random_tensor)
輸出如下:
tensor([[0.6156, 0.5219, 0.4669],
[0.1318, 0.1020, 0.5328]])
張量的連接
# 張量的連接
x = torch.tensor([[1, 2], [3, 4]])
y = torch.tensor([[5, 6], [7, 8]])
z = torch.cat((x, y))
print(z)
輸出如下:
tensor([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
張量的堆疊
# 張量的堆疊
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = torch.stack((x, y))
print(z)
輸出如下:
tensor([[1, 2, 3],
[4, 5, 6]])