Xử Lý Tensor Và Các Phép Tính Toán Cơ Bản Trong PyTorch

Cấu Trúc Tensor Trong Học Sâu

Tensor được xem là đơn vị tính toán cơ bản trong toàn bộ quy trình học sâu. Đây là một mảng đa chiều chứa các giá trị số học, tương tự như ma trận nhưng mở rộng sang nhiều chiều hơn. Cụ thể:

  • Tensor một chiều (1-dimension) đại diện cho vectơ.
  • Tensor hai chiều (2-dimensions) tương ứng với ma trận.
  • Tensor từ ba chiều trở lên không có tên gọi đặc biệt trong toán học cổ điển mà chỉ được gọi chung là tensor nhiều chiều.

Dưới đây là cách khởi tạo và thao tác trên các đối tượng tensor trong thư viện PyTorch.

Khởi Tạo Biến Dạng Tensor

Có nhiều phương thức để xây dựng mảng dữ liệu ban đầu tùy theo mục đích của mô hình:

import torch

# Tạo một mảng tăng dần từ 0 đến 11
data_indices = torch.arange(12)

# Tạo ma trận rỗng kích thước 2x3 filled với giá trị 0
zeros_tensor = torch.zeros((2, 3))

# Khởi tạo ngẫu nhiên theo phân phối chuẩn
random_values = torch.randn(4, 5)

Khi làm việc với dữ liệu thực tế, kích thước tensor thường cần thay đổi linh hoạt. Hàm .reshape() hoặc .view() cho phép tái định dạng mảng mà không sao chép dữ liệu nếu điều kiện cho phép. Việc sử dụng -1 cho phép framework tự động suy ra kích thước phù hợp dựa trên tổng phần tử còn lại.

# Đổi hình dạng thành 3 hàng x 4 cột
reshaped_data = data_indices.reshape(3, 4)

# Tự động tính toán số lượng hàng dựa trên số cột cố định là 4
auto_shape = data_indices.reshape(-1, 4)

Phép Toán và Kết Hợp Dữ Liệu

Tensor hỗ trợ đầy đủ các toán tử toán học tiêu chuẩn bao gồm cộng, trừ, nhân, chia và so sánh (bằng, khác). Ngoài ra, khả năng nối các tensor lại với nhau dọc theo một trục nhất định (concatenation) là rất hữu ích khi gộp nhiều tập dữ liệu nhỏ.

A = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
B = torch.tensor([[7.0, 8.0, 9.0]])

# Gộp A và B theo hàng (dim 0)
stacked_h = torch.cat((A, B), dim=0)

# Gộp A và B theo cột (dim 1) - Cần cùng số dòng mới áp dụng được
concat_wide = torch.cat((A, B.t()), dim=1) 

# Tổng các phần tử trong tensor
total_sum = A.sum()

Lấy Dữ Liệu Con Và Tương Tác Với NumPy

Cách truy xuất dữ liệu con (slicing) và đánh chỉ mục (indexing) trong PyTorch tương đồng gần như hoàn toàn với cú pháp Python thuần hoặc danh sách thông thường. Điều này giúp giảm thiểu rào cản khi chuyển đổi tư duy lập trình.

Một điểm mạnh của hệ sinh thái này là sự chuyển đổi liền mạch giữa PyTorch Tensor và NumPy array. Lưu ý rằng cả hai phải nằm trên CPU thì quá trình chuyển đổi mới diễn ra hiệu quả.

# Chuyển Tensor sang NumPy array
np_array = A.numpy()

# Chuyển ngược lại từ NumPy sang Tensor
back_to_tensor = torch.from_numpy(np_array)

Ứng Dụng Tiền Xử Lý Dữ Liệu

Trước khi đưa vào huấn luyện mô hình, bước tiền xử lý (preprocessing) quyết định chất lượng đầu vào. Các công cụ phổ biến thường kết hợp gồm:

  • Pandas: Giúp đọc và vệ sinh dữ liệu thô dưới dạng bảng (DataFrame).
  • Dataset Class: Lớp trừu tượng hóa trong PyTorch để quản lý luồng tải dữ liệu, cho phép sử dụng tối ưu qua DataLoader.
  • Data Augmentation: Các biến thể ảnh nhằm tăng cường độ đa dạng của tập train.

Hiểu biết về đại số tuyến tính, giải tích và xác suất thống kê cũng đóng vai trò nền tảng để tùy biến các hàm mất mát và chiến lược tối ưu hóa phức tạp hơn.

Thẻ: PyTorch tensor deep-learning python-data machine-learning-math

Đăng vào ngày 7 tháng 6 lúc 17:23