0Pricing
Learn AI with Python · Lekcja

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, DataLoader

Interfejs 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, label

Dlaczego 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 transforms

transforms.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])
    break

Szybkie 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

  1. Tensory PyTorch i Autograd
  2. Własne zbiory danych i moduły DataLoader
  3. Tworzenie i trenowanie sieci CNN w PyTorch
  4. Wykrywanie obiektów za pomocą YOLOv8
← Powrót do Learn AI with Python