Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Hướng dẫn về Tensor cơ bản trong PyTorch
Trong bài này, bạn sẽ học những kiến thức cơ bản về Tensors và các thao tác liên quan trong PyTorch. Tensors là cốt lõi của PyTorch, vì vậy nắm vững khái niệm này là bước đầu quan trọng để tiến xa hơn trong việc phát triển các mô hình học sâu.
Tensors là gì?
Tensor là một cấu trúc dữ liệu trong PyTorch, có thể có nhiều chiều (1D, 2D, 3D, hoặc cao hơn).
Ví dụ:
- 1D: vector
- 2D: ma trận
- 3D hoặc cao hơn: mảng đa chiều
Dưới đây là các ví dụ về cách tạo tensors:
import torch # Tạo tensor chưa được khởi tạo (các giá trị ngẫu nhiên, không xác định) x = torch.empty(1) # Tensor 1 chiều, dạng scalar print(x) x = torch.empty(3) # Tensor 1D (vector) print(x) x = torch.empty(2, 3) # Tensor 2D (ma trận) print(x) x = torch.empty(2, 2, 3) # Tensor 3D print(x)
Các phương thức tạo Tensor trong PyTorch
Tạo tensor với giá trị ngẫu nhiên:
x = torch.rand(5, 3) print(x)
Tạo tensor với giá trị mặc định (toàn 0 hoặc toàn 1):
Bài viết này được đăng tại [free tuts .net]
x = torch.zeros(5, 3) # Tensor toàn 0 print(x) x = torch.ones(5, 3) # Tensor toàn 1 print(x)
Kiểm tra kích thước và kiểu dữ liệu:
print(x.size()) # Kích thước tensor print(x.dtype) # Kiểu dữ liệu (mặc định là float32)
Xác định kiểu dữ liệu:
x = torch.zeros(5, 3, dtype=torch.float16) print(x.dtype) # Kiểm tra kiểu dữ liệu
Tạo tensor từ dữ liệu cụ thể:
x = torch.tensor([5.5, 3]) print(x.size()) # Kích thước của tensor
requires_grad
: Tính Gradient
Dùng tham số requires_grad=True
để yêu cầu PyTorch tính toán gradient cho tensor này. Điều này rất quan trọng khi tối ưu các mô hình học máy.
x = torch.tensor([5.5, 3], requires_grad=True)
Các phép toán trên Tensor trong PyTorch
Bạn có thể thực hiện các phép toán cơ bản trên tensors như cộng, trừ, nhân, chia:
y = torch.rand(2, 2) x = torch.rand(2, 2) # Cộng phần tử tương ứng z = x + y # Hoặc dùng hàm torch.add z = torch.add(x, y) # Trừ z = x - y z = torch.sub(x, y) # Nhân z = x * y z = torch.mul(x, y) # Chia z = x / y z = torch.div(x, y)
Truy Cập Phần Tử (Slicing)
x = torch.rand(5, 3) # Lấy tất cả các dòng, cột 0 print(x[:, 0]) # Lấy dòng 1, tất cả các cột print(x[1, :]) # Lấy phần tử tại (1, 1) print(x[1, 1]) # Lấy giá trị thực của một phần tử (nếu là số duy nhất) print(x[1, 1].item())
Thay đổi kích thước (Reshape)
Dùng torch.view()
để thay đổi kích thước tensor.
x = torch.randn(4, 4) # Thay đổi thành 1 chiều y = x.view(16) # Thay đổi thành 2D với chiều -1 được tự động xác định z = x.view(-1, 8) print(x.size(), y.size(), z.size())
Chuyển đổi Tensor và NumPy
Từ Tensor sang NumPy:
a = torch.ones(5) b = a.numpy() print(type(b)) # <class 'numpy.ndarray'>
Lưu ý: Nếu tensor nằm trên CPU, NumPy và tensor sẽ chia sẻ bộ nhớ. Thay đổi một cái sẽ làm thay đổi cái kia.
a.add_(1) print(a) # Tensor print(b) # NumPy array cũng thay đổi
Từ NumPy sang Tensor:
import numpy as np a = np.ones(5) b = torch.from_numpy(a) print(b) # Thay đổi NumPy cũng thay đổi Tensor a += 1 print(a) print(b)
Chuyển Tensor sang GPU
Mặc định, các tensors được tạo trên CPU. Bạn có thể di chuyển chúng sang GPU để tăng hiệu suất nếu GPU khả dụng.
if torch.cuda.is_available(): device = torch.device("cuda") y = torch.ones_like(x, device=device) # Tạo tensor trực tiếp trên GPU x = x.to(device) # Di chuyển tensor sang GPU z = x + y # Di chuyển trở lại CPU z = z.to("cpu")
Kết bài
Bài viết cung cấp các kiến thức cơ bản về tensors trong PyTorch. Đây là bước khởi đầu quan trọng giúp bạn dễ dàng tiếp cận với các thuật toán học sâu và tối ưu hóa mô hình. Hãy thực hành thường xuyên để nắm vững các thao tác này!