Benutzerdefinierte Datasets und DataLoader
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, Transforms, Datenaugmentation.
Benutzerdefinierte Datasets und DataLoader ist eine kostenlose Learn AI with Python-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn AI with Python-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn AI with Python-Kurs umfasst insgesamt 4 Lektionen.
Daten in ein Modell einspeisen
Für das Training benötigen Sie eine effiziente Möglichkeit, Daten einzulesen, umzuwandeln und zu Batches zusammenzufassen. PyTorch stellt dafür zwei Abstraktionen bereit: Dataset (weiß, wie ein einzelnes Beispiel abgerufen wird) und DataLoader (bildet daraus Batches und mischt sie).
from torch.utils.data import Dataset, DataLoaderDie Dataset-Schnittstelle
Eine benutzerdefinierte Unterklasse von Dataset muss zwei Methoden implementieren: __len__ (wie viele Beispiele vorhanden sind) und __getitem__ (gibt das Beispiel an einem Index zurück). PyTorch ruft diese Methoden auf, um Daten abzurufen.
__len__ implementieren
__len__ teilt PyTorch die Größe des Datensatzes mit. So weiß PyTorch, wie viele Indizes vorhanden sind und wie viele Batches eine Epoche enthält.
class ImageDataset(Dataset):
def __init__(self, paths, labels):
self.paths = paths
self.labels = labels
def __len__(self):
return len(self.paths)__getitem__ implementieren
__getitem__ lädt anhand eines Index ein Beispiel (und dessen Label) und gibt es zurück. Hier öffnen Sie beispielsweise eine Bilddatei und wandeln sie in einen Tensor um.
from PIL import Image
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
label = self.labels[idx]
return img, labelWarum Transformationen?
Rohbilder unterscheiden sich in Größe und Pixelbereich. Transformationen vereinheitlichen sie: Sie skalieren sie auf eine feste Form, wandeln sie in einen Tensor um und normalisieren die Pixelwerte, damit das Modell stabil trainiert.
from torchvision import transformstransforms.Compose
transforms.Compose verknüpft mehrere Transformationen zu einer Pipeline, die sie der Reihe nach anwendet. Eine typische Kette besteht aus Resize, dann ToTensor und anschließend 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])
])Die Transformationen verstehen
Resize legt die räumliche Größe fest; ToTensor wandelt ein PIL-Bild in einen Tensor um und skaliert die Pixel auf [0,1]; Normalize verschiebt und skaliert jeden Kanal auf Mittelwert null und Einheitsvarianz, was die Konvergenz beschleunigt.
Transformationen im Dataset anwenden
Übergeben Sie die Transformation an das Dataset und wenden Sie sie innerhalb von __getitem__ an, damit jedes Beispiel beim Abruf einheitlich vorverarbeitet wird.
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]In einen DataLoader verpacken
Der DataLoader wandelt ein Dataset in eine iterierbare Folge von Batches um. Legen Sie mit batch_size fest, wie viele Beispiele pro Schritt verarbeitet werden, und verwenden Sie shuffle=True, um die Reihenfolge in jeder Epoche zufällig zu mischen (beim Training wichtig).
dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)num_workers für mehr Geschwindigkeit
num_workers startet parallele Unterprozesse, die Daten laden und transformieren, während die GPU trainiert, und verbirgt so die I/O-Latenz. Ein Wert wie 4 hält die GPU oft beschäftigt, statt sie warten zu lassen.
loader = DataLoader(
dataset,
batch_size=32,
shuffle=True,
num_workers=4
)Batches durchlaufen
Durchlaufen Sie den DataLoader in einer Schleife, um Tensoren in Batches zu erhalten. Jede Iteration liefert (images, labels), wobei images die Form [batch_size, channels, H, W] hat und für das Modell bereit ist.
for images, labels in loader:
print(images.shape) # torch.Size([32, 3, 224, 224])
breakKurzer Test
Testen Sie Ihr Wissen über Datenpipelines.
Zusammenfassung: Datasets und DataLoaders
Sie haben ein benutzerdefiniertes Dataset mit __len__ und __getitem__ erstellt, Bilder mit transforms.Compose (Resize, ToTensor, Normalize) vorverarbeitet und es mit batch_size, shuffle und num_workers in einen DataLoader verpackt, um Ihr Modell effizient mit Batches zu versorgen.
Häufig gestellte Fragen
Ist die Lektion „Benutzerdefinierte Datasets und DataLoader“ kostenlos?
Ja — der vollständige Text von „Benutzerdefinierte Datasets und DataLoader“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn AI with Python-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn AI with Python-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Benutzerdefinierte Datasets und DataLoader“?
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, Transforms, Datenaugmentation. Du übst Learn AI with Python mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Learn AI with Python zu starten?
Keine Vorkenntnisse erforderlich. Learn AI with Python auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Benutzerdefinierte Datasets und DataLoader“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Learn AI with Python-Lektion Code schreiben und ausführen?
Ja. Jede Learn AI with Python-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- PyTorch-Tensoren und Autograd
- Benutzerdefinierte Datasets und DataLoader
- CNNs in PyTorch erstellen und trainieren
- Objekterkennung mit YOLOv8