Tilpassede datasæt og DataLoaders
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transforms, augmentation.
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, DataLoaderDataset-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, labelHvorfor 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 transformstransforms.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])
breakHurtig 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.
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
- PyTorch-tensors og Autograd
- Tilpassede datasæt og DataLoaders
- Bygning og træning af CNN'er i PyTorch
- Objektdetektion med YOLOv8