Lær AI med Python · leksjon

Egendefinerte datasett og DataLoaders

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformasjoner og dataaugmentering.

Leksjon 2 av 413 trinn

Egendefinerte datasett og DataLoaders er en gratis leksjon i Lær AI med Python på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lær AI med Python, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lær AI med Python inneholder totalt 4 leksjoner.

Mate data inn i en modell

Trening krever en effektiv måte å lese, transformere og gruppere data i batcher på. PyTorch tilbyr to abstraksjoner: Dataset (vet hvordan ett eksempel hentes) og DataLoader (grupperer eksemplene i batcher og stokker dem).

from torch.utils.data import Dataset, DataLoader

Dataset-grensesnittet

En egendefinert underklasse av Dataset må implementere to metoder: __len__ (hvor mange eksempler det finnes) og __getitem__ (returnerer eksempelet på en gitt indeks). PyTorch kaller disse for å hente data.

Implementere __len__

__len__ forteller PyTorch hvor stort datasettet er, slik at rammeverket vet hvor mange indekser som finnes og hvor mange batcher en epoke inneholder.

class ImageDataset(Dataset):
    def __init__(self, paths, labels):
        self.paths = paths
        self.labels = labels

    def __len__(self):
        return len(self.paths)

Implementere __getitem__

__getitem__ laster inn og returnerer ett eksempel (og etiketten til eksempelet) for en gitt indeks. Det er her De åpner en bildefil og konverterer den til en tensor.

from PIL import Image

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        label = self.labels[idx]
        return img, label

Hvorfor transformasjoner?

Råbilder varierer i størrelse og pikselområde. Transformasjoner standardiserer dem: endre størrelsen til en fast form, konvertere dem til en tensor og normalisere pikselverdiene slik at modellen trenes stabilt.

from torchvision import transforms

transforms.Compose

transforms.Compose lenker flere transformasjoner sammen til én behandlingspipeline som brukes i angitt rekkefølge. En typisk kjede er Resize, deretter ToTensor og så 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])
])

Forstå transformasjonene

Resize fastsetter den romlige størrelsen; ToTensor konverterer et PIL-bilde til en tensor og skalerer pikslene til [0,1]; Normalize forskyver og skalerer hver kanal til nullgjennomsnitt og varians lik én, noe som gir raskere konvergens.

Bruke transformasjoner i datasettet

Send transformasjonen inn i datasettet, og bruk den i __getitem__ slik at hvert eksempel forhåndsbehandles konsekvent når det hentes.

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]

Pakke inn i en DataLoader

DataLoader gjør et Dataset om til en itererbar samling av batcher. Angi batch_size for å styre hvor mange eksempler hvert trinn skal ha, og shuffle=True for å stokke rekkefølgen i hver epoke (noe som er viktig under trening).

dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)

num_workers for høyere hastighet

num_workers starter parallelle underprosesser som laster inn og transformerer data mens GPU-en trener, slik at I/O-forsinkelsen skjules. En verdi som 4 holder ofte GPU-en i gang i stedet for at den må vente.

loader = DataLoader(
    dataset,
    batch_size=32,
    shuffle=True,
    num_workers=4
)

Iterere over batcher

Gå gjennom DataLoader-en for å hente tensorer i batcher. Hver iterasjon gir (images, labels), der images har formen [batch_size, channels, H, W] og er klar for modellen.

for images, labels in loader:
    print(images.shape)  # torch.Size([32, 3, 224, 224])
    break

Hurtigsjekk

Test forståelsen Deres av datapipelinen.

Oppsummering: Datasett og DataLoadere

De bygget et egendefinert Dataset med __len__ og __getitem__, forhåndsbehandlet bilder med transforms.Compose (Resize, ToTensor, Normalize) og pakket det inn i en DataLoader med batch_size, shuffle og num_workers for å mate batcher effektivt inn i modellen.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
53
Leksjoner
225

Ofte stilte spørsmål

Er leksjonen «Egendefinerte datasett og DataLoaders» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lær AI med Python, inkludert «Egendefinerte datasett og DataLoaders», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lær AI med Python inneholder totalt 4 leksjoner.

Hva lærer jeg i «Egendefinerte datasett og DataLoaders»?

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformasjoner og dataaugmentering. Du øver på Lær AI med Python med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lær AI med Python?

Ingen tidligere erfaring er nødvendig. Lær AI med Python på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Egendefinerte datasett og DataLoaders»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lær AI med Python-leksjonen?

Ja. Alle Lær AI med Python-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. PyTorch-tensorer og Autograd
  2. Egendefinerte datasett og DataLoaders
  3. Bygging og trening av CNN-er i PyTorch
  4. Objektdeteksjon med YOLOv8
← Tilbake til Lær AI med Python