[入門] Pytorch 教學 1 張量與GPU加速

geometry, mathematics, volume-1044090.jpg

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]])

Back to Blog pytorch連結

返回頂端