Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Dataset Transforms trong PyTorch Beginner
Trong phần này, mình sẽ tìm hiểu cách sử dụng Dataset Transforms (chuyển đổi dữ liệu) cùng với lớp Dataset tích hợp trong PyTorch. Bạn sẽ học cách: Sử dụng các Transform có sẵn để xử lý ảnh, mảng (arrays) và tensor.Tạo các Transform tùy chỉnh phù hợp với nhu cầu.
Cách sử dụng Dataset Transformscùng với lớp Dataset trong PyTorch
Dataset Transforms là một công cụ hữu ích giúp tiền xử lý dữ liệu đầu vào trước khi truyền vào mô hình. Một số nội dung chính bao gồm:
- Sử dụng các Transform tích hợp từ
torchvision.transforms
. - Tạo Transform tùy chỉnh bằng cách định nghĩa lớp với phương thức
__call__()
. - Kết hợp nhiều Transform bằng cách sử dụng
torchvision.transforms.Compose()
.
Tạo Dataset hỗ trợ Transform
import torch import torchvision from torch.utils.data import Dataset import numpy as np class WineDataset(Dataset): def __init__(self, transform=None): # Đọc dữ liệu từ file CSV xy = np.loadtxt('./data/wine/wine.csv', delimiter=',', dtype=np.float32, skiprows=1) self.n_samples = xy.shape[0] # Dữ liệu đặc trưng (features) và nhãn (labels) # Ở đây chưa chuyển đổi sang Tensor self.x_data = xy[:, 1:] self.y_data = xy[:, [0]] # Biến transform cho phép áp dụng các phép chuyển đổi self.transform = transform def __getitem__(self, index): # Truy xuất một mẫu theo chỉ mục sample = self.x_data[index], self.y_data[index] # Áp dụng Transform nếu được cung cấp if self.transform: sample = self.transform(sample) return sample def __len__(self): # Trả về số lượng mẫu trong Dataset return self.n_samples
Tạo Transform tùy chỉnh
# Lớp chuyển đổi thành Tensor class ToTensor: def __call__(self, sample): inputs, targets = sample # Chuyển từ numpy.ndarray sang torch.Tensor return torch.from_numpy(inputs), torch.from_numpy(targets) # Lớp nhân các giá trị đầu vào với một hằng số class MulTransform: def __init__(self, factor): self.factor = factor def __call__(self, sample): inputs, targets = sample # Nhân đặc trưng (inputs) với factor inputs *= self.factor return inputs, targets
Thử nghiệm với các Transform
# Trường hợp không áp dụng Transform print('Không sử dụng Transform') dataset = WineDataset() first_data = dataset[0] features, labels = first_data print(type(features), type(labels)) print(features, labels) # Sử dụng Transform: Chuyển thành Tensor print('\nSử dụng Transform chuyển sang Tensor') dataset = WineDataset(transform=ToTensor()) first_data = dataset[0] features, labels = first_data print(type(features), type(labels)) print(features, labels) # Kết hợp nhiều Transform: Chuyển thành Tensor và nhân với hằng số print('\nKết hợp Transform: Chuyển sang Tensor và nhân với hằng số') composed = torchvision.transforms.Compose([ToTensor(), MulTransform(4)]) dataset = WineDataset(transform=composed) first_data = dataset[0] features, labels = first_data print(type(features), type(labels)) print(features, labels)
Giải thích từng phần
Dataset hỗ trợ Transform
- Lớp
WineDataset
- Dataset được thiết kế để hỗ trợ các Transform bằng cách truyền đối tượng Transform qua tham số
transform
. - Trong hàm
__getitem__()
, nếutransform
không rỗng, Transform sẽ được áp dụng cho dữ liệu.
- Dataset được thiết kế để hỗ trợ các Transform bằng cách truyền đối tượng Transform qua tham số
Các Transform tùy chỉnh
ToTensor
- Chuyển đổi dữ liệu từ định dạng mảng Numpy sang Tensor (định dạng cần thiết trong PyTorch).
MulTransform
- Tăng giá trị của dữ liệu đầu vào bằng cách nhân với một hằng số
factor
. - Phù hợp để xử lý dữ liệu theo yêu cầu cụ thể, ví dụ như chuẩn hóa hoặc mở rộng.
- Tăng giá trị của dữ liệu đầu vào bằng cách nhân với một hằng số
Kết hợp nhiều Transform
Compose
- Dùng để kết hợp nhiều Transform theo một trình tự nhất định.
- Trong ví dụ,
ToTensor
được áp dụng trước, sau đóMulTransform
sẽ nhân dữ liệu với hằng số.
Kết quả và nhận xét
Khi chạy mã, bạn sẽ thấy sự khác biệt trong dữ liệu:
-
Không sử dụng Transform
Bài viết này được đăng tại [free tuts .net]
- Dữ liệu vẫn ở định dạng
numpy.ndarray
. - Không có thay đổi nào được áp dụng.
- Dữ liệu vẫn ở định dạng
-
Transform chuyển sang Tensor
- Dữ liệu được chuyển đổi từ Numpy sang Tensor.
- Đây là bước bắt buộc trước khi đưa dữ liệu vào mô hình PyTorch.
-
Kết hợp Transform (Chuyển đổi + Nhân với hằng số)
- Sau khi chuyển thành Tensor, các giá trị được nhân với hằng số .
- Đây là cách áp dụng các thao tác tiền xử lý phức tạp.
Kết bài
- Dataset Transforms giúp quá trình tiền xử lý dữ liệu linh hoạt và dễ bảo trì hơn.
- Bạn có thể tận dụng các Transform tích hợp trong PyTorch hoặc tự định nghĩa theo nhu cầu.
- Cách kết hợp Transform thông qua
Compose
rất tiện lợi khi cần áp dụng chuỗi các bước xử lý phức tạp.
Công cụ này rất hữu ích khi làm việc với các tập dữ liệu lớn và phức tạp trong học sâu.