Egendefinerte datasett og DataLoaders
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformasjoner og dataaugmentering.
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, DataLoaderDataset-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, labelHvorfor 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 transformstransforms.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])
breakHurtigsjekk
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.
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
- PyTorch-tensorer og Autograd
- Egendefinerte datasett og DataLoaders
- Bygging og trening av CNN-er i PyTorch
- Objektdeteksjon med YOLOv8