Własne zbiory danych i moduły DataLoader
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformacje, augmentacja.
Własne zbiory danych i moduły DataLoader to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Przekazywanie danych do modelu
Trenowanie wymaga wydajnego sposobu odczytywania, przekształcania i grupowania danych w partie. PyTorch udostępnia dwie abstrakcje: Dataset (wie, jak pobrać pojedynczy przykład) oraz DataLoader (grupuje przykłady w partie i je tasuje).
from torch.utils.data import Dataset, DataLoaderInterfejs Dataset
Niestandardowa podklasa Dataset musi implementować dwie metody: __len__ (liczba przykładów) oraz __getitem__ (zwraca przykład o podanym indeksie). PyTorch wywołuje te metody, aby pobierać dane.
Implementowanie __len__
__len__ informuje PyTorch o rozmiarze zbioru danych, dzięki czemu framework wie, ile indeksów istnieje i ile partii zawiera epoka.
class ImageDataset(Dataset):
def __init__(self, paths, labels):
self.paths = paths
self.labels = labels
def __len__(self):
return len(self.paths)Implementowanie __getitem__
__getitem__ wczytuje i zwraca pojedynczy przykład (wraz z etykietą) dla podanego indeksu. W tym miejscu otwiera się plik obrazu i konwertuje go na tensor.
from PIL import Image
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
label = self.labels[idx]
return img, labelDlaczego stosować transformacje?
Obrazy źródłowe różnią się rozmiarem i zakresem wartości pikseli. Transformacje standaryzują je: zmieniają rozmiar na stały, konwertują obraz na tensor i normalizują wartości pikseli, aby zapewnić stabilne trenowanie modelu.
from torchvision import transformstransforms.Compose
transforms.Compose łączy kilka transformacji w jeden potok, w którym są one stosowane w określonej kolejności. Typowy potok obejmuje Resize, następnie ToTensor i Normalize.
tf = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])Zrozumienie transformacji
Resize ustala rozmiar przestrzenny; ToTensor konwertuje obraz PIL na tensor i skaluje piksele do zakresu [0,1]; Normalize przesuwa i skaluje każdy kanał tak, aby miał średnią równą zero i wariancję równą jeden, co przyspiesza zbieżność.
Stosowanie transformacji w Dataset
Należy przekazać transformację do zbioru danych i stosować ją wewnątrz __getitem__, aby każdy przykład był spójnie przetwarzany podczas pobierania.
class ImageDataset(Dataset):
def __init__(self, paths, labels, transform):
self.paths, self.labels, self.transform = paths, labels, transform
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
return self.transform(img), self.labels[idx]Opakowywanie w DataLoader
DataLoader przekształca Dataset w obiekt iterowalny zwracający partie. Należy ustawić batch_size, aby określić liczbę przykładów w kroku, oraz shuffle=True, aby losować kolejność w każdej epoce (co jest ważne podczas trenowania).
dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)num_workers dla wydajności
num_workers uruchamia równoległe podprocesy, które wczytują i przekształcają dane podczas trenowania na GPU, ukrywając opóźnienia wejścia i wyjścia. Wartość taka jak 4 często pozwala stale dostarczać dane do GPU zamiast czekać.
loader = DataLoader(
dataset,
batch_size=32,
shuffle=True,
num_workers=4
)Iterowanie po partiach
Należy iterować po DataLoaderze, aby otrzymywać tensory pogrupowane w partie. Każda iteracja zwraca (images, labels), gdzie images ma kształt [batch_size, channels, H, W] i jest gotowe do przekazania do modelu.
for images, labels in loader:
print(images.shape) # torch.Size([32, 3, 224, 224])
breakSzybkie sprawdzenie
Proszę sprawdzić znajomość potoku danych.
Podsumowanie: zbiory danych i DataLoadery
Utworzono niestandardowy Dataset z metodami __len__ i __getitem__, wstępnie przetworzono obrazy za pomocą transforms.Compose (Resize, ToTensor, Normalize), a następnie opakowano zbiór w DataLoader z ustawieniami batch_size, shuffle i num_workers, aby wydajnie dostarczać partie do modelu.
Często zadawane pytania
Czy lekcja „Własne zbiory danych i moduły DataLoader” jest bezpłatna?
Tak — pełny tekst „Własne zbiory danych i moduły DataLoader” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Własne zbiory danych i moduły DataLoader”?
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformacje, augmentacja. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Własne zbiory danych i moduły DataLoader”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tensory PyTorch i Autograd
- Własne zbiory danych i moduły DataLoader
- Tworzenie i trenowanie sieci CNN w PyTorch
- Wykrywanie obiektów za pomocą YOLOv8