Anpassade dataset och DataLoaders
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformeringar, dataaugmentation.
Anpassade dataset och DataLoaders är en gratis lektion i Lär Er AI med Python på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär Er AI med Python, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Mata in data i en modell
Träning kräver ett effektivt sätt att läsa, omvandla och gruppera data i batchar. PyTorch tillhandahåller två abstraktioner: Dataset (vet hur ett enskilt exempel hämtas) och DataLoader (grupperar och blandar exemplen).
from torch.utils.data import Dataset, DataLoaderDataset-gränssnittet
En anpassad underklass av Dataset måste implementera två metoder: __len__ (antalet exempel) och __getitem__ (returnerar exemplet på ett index). PyTorch anropar dessa för att hämta data.
Implementera __len__
__len__ anger datasetets storlek för PyTorch, så att ramverket vet hur många index som finns och hur många batchar en epok innehåller.
class ImageDataset(Dataset):
def __init__(self, paths, labels):
self.paths = paths
self.labels = labels
def __len__(self):
return len(self.paths)Implementera __getitem__
__getitem__ läser in och returnerar ett exempel (och dess etikett) för ett givet index. Det är här ni öppnar en bildfil och omvandlar den till en tensor.
from PIL import Image
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
label = self.labels[idx]
return img, labelVarför transformationer?
Råbilder varierar i storlek och pixelintervall. Transformationer standardiserar dem: ändrar storleken till en fast form, omvandlar dem till en tensor och normaliserar pixelvärdena så att modellen tränas stabilt.
from torchvision import transformstransforms.Compose
transforms.Compose kedjar ihop flera transformationer till en pipeline som tillämpas i ordning. En typisk kedja är Resize, sedan ToTensor och därefter 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])
])Förstå transformationerna
Resize fastställer den spatiala storleken; ToTensor omvandlar en PIL-bild till en tensor och skalar pixlarna till [0,1]; Normalize förskjuter och skalar varje kanal till medelvärdet noll och variansen ett, vilket påskyndar konvergensen.
Tillämpa transformationer i datasetet
Skicka in transformationen till datasetet och tillämpa den i __getitem__, så att varje exempel förbehandlas konsekvent när det hämtas.
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]Omsluta i en DataLoader
DataLoader omvandlar ett Dataset till en itererbar samling batchar. Ange batch_size för att styra antalet exempel per steg och shuffle=True för att slumpa ordningen vid varje epok (vilket är viktigt vid träning).
dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)num_workers för högre hastighet
num_workers startar parallella underprocesser som läser in och omvandlar data medan GPU:n tränar, vilket döljer I/O-fördröjningen. Ett värde som 4 håller ofta GPU:n sysselsatt i stället för att den behöver vänta.
loader = DataLoader(
dataset,
batch_size=32,
shuffle=True,
num_workers=4
)Iterera över batchar
Iterera över DataLoader för att hämta tensorer i batchar. Varje iteration ger (images, labels), där images har formen [batch_size, channels, H, W] och är redo för modellen.
for images, labels in loader:
print(images.shape) # torch.Size([32, 3, 224, 224])
breakSnabb kontroll
Testa era kunskaper om datapipelinen.
Sammanfattning: Dataset och DataLoader
Ni byggde ett anpassat Dataset med __len__ och __getitem__, förbehandlade bilder med transforms.Compose (Resize, ToTensor, Normalize) och omslöt det i en DataLoader med batch_size, shuffle och num_workers för att effektivt mata batchar till modellen.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 53
- Lektioner
- 225
Vanliga frågor
Är lektionen ”Anpassade dataset och DataLoaders” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär Er AI med Python, inklusive ”Anpassade dataset och DataLoaders”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Vad lär jag mig i ”Anpassade dataset och DataLoaders”?
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformeringar, dataaugmentation. Ni övar på Lär Er AI med Python med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lär Er AI med Python?
Du behöver inga förkunskaper. Utbildningen i Lär Er AI med Python på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Anpassade dataset och DataLoaders”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lär Er AI med Python-lektionen?
Ja. Varje Lär Er AI med Python-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- PyTorch-tensorer och Autograd
- Anpassade dataset och DataLoaders
- Bygga och träna CNN-modeller i PyTorch
- Objektdetektering med YOLOv8