Lær AI med Python · Lektion

Tilpassede datasæt og DataLoaders

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transforms, augmentation.

Lektion 2 af 413 trin

Tilpassede datasæt og DataLoaders er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær AI med Python, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Indlæsning af data til en model

Træning kræver en effektiv måde at læse, transformere og samle data i batcher på. PyTorch tilbyder to abstraktioner: Dataset (ved, hvordan ét eksempel hentes) og DataLoader (samler dem i batcher og blander dem).

from torch.utils.data import Dataset, DataLoader

Dataset-interfacet

En brugerdefineret underklasse af Dataset skal implementere to metoder: __len__ (hvor mange eksempler der er) og __getitem__ (returnerer eksemplet ved et indeks). PyTorch kalder dem for at hente data.

Implementering af __len__

__len__ fortæller PyTorch, hvor stort datasættet er, så det ved, hvor mange indekser der findes, og hvor mange batcher en epoke indeholder.

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

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

Implementering af __getitem__

__getitem__ indlæser og returnerer ét eksempel (og dets mærkat) ud fra et indeks. Det er her, du åbner en billedfil 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 transformationer?

Rå billeder varierer i størrelse og pixelområde. Transformationer standardiserer dem: ændr størrelsen til en fast form, konvertér dem til en tensor, og normalisér pixelværdierne, så modellen trænes stabilt.

from torchvision import transforms

transforms.Compose

transforms.Compose kæder flere transformationer sammen til ét behandlingsforløb, der anvendes i rækkefølge. En typisk kæde er Resize, derefter 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åelse af transformationerne

Resize fastsætter den rumlige størrelse; ToTensor konverterer et PIL-billede til en tensor og skalerer pixelværdierne til [0,1]; Normalize forskyder og skalerer hver kanal til middelværdi nul og varians én, hvilket gør konvergensen hurtigere.

Anvendelse af transformationer i datasættet

Overfør transformationen til datasættet, og anvend den inde i __getitem__, så hvert eksempel forbehandles ensartet, 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]

Indpakning i en DataLoader

DataLoader omdanner et Dataset til en samling batcher, som kan gennemløbes. Indstil batch_size for at styre antallet af eksempler pr. trin, og brug shuffle=True til at blande rækkefølgen ved hver epoke (det er vigtigt under træning).

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

num_workers for hastighed

num_workers starter parallelle underprocesser, som indlæser og transformerer data, mens GPU'en træner, så I/O-forsinkelsen skjules. En værdi som 4 holder ofte GPU'en forsynet med data i stedet for at lade den vente.

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

Gennemløb af batcher

Gennemløb DataLoader for at hente tensorer i batcher. Hver gentagelse giver (images, labels), hvor images har formen [batch_size, channels, H, W] og er klar til modellen.

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

Hurtig kontrol

Test din viden om databehandlingsforløb.

Opsummering: Datasæt og DataLoadere

Du opbyggede et brugerdefineret Dataset med __len__ og __getitem__, forbehandlede billeder med transforms.Compose (Resize, ToTensor, Normalize) og pakkede det ind i en DataLoader med batch_size, shuffle og num_workers, så batcher effektivt kunne leveres til din model.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
53
Lektioner
225

Ofte stillede spørgsmål

Er lektionen “Tilpassede datasæt og DataLoaders” gratis?

Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “Tilpassede datasæt og DataLoaders”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Tilpassede datasæt og DataLoaders”?

torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transforms, augmentation. Du øver dig i Lær AI med Python med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær AI med Python?

Der kræves ingen tidligere erfaring. Lær AI med Python på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Tilpassede datasæt og DataLoaders”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

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

Ja. Alle Lær AI med Python-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. PyTorch-tensors og Autograd
  2. Tilpassede datasæt og DataLoaders
  3. Bygning og træning af CNN'er i PyTorch
  4. Objektdetektion med YOLOv8
← Tilbage til Lær AI med Python