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ếutransformkhô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 đóMulTransformsẽ 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
Composerấ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.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng