Jeux de données et DataLoaders personnalisés
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformations, augmentation.
Jeux de données et DataLoaders personnalisés est une leçon Learn AI with Python gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn AI with Python, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn AI with Python comprend 4 leçons au total.
Fournir des données à un modèle
L'entraînement nécessite un moyen efficace de lire, transformer et regrouper les données en lots. PyTorch fournit deux abstractions : jeu de données (qui sait récupérer un échantillon) et DataLoader (qui les regroupe en lots et les mélange).
from torch.utils.data import Dataset, DataLoaderL'interface du jeu de données
Une sous-classe personnalisée de Dataset doit implémenter deux méthodes : __len__ (le nombre d'échantillons) et __getitem__ (renvoyer l'échantillon correspondant à un indice). PyTorch les appelle pour récupérer les données.
Implémenter __len__
__len__ indique à PyTorch la taille du jeu de données, afin qu'il sache combien d'indices existent et combien de lots contient une époque.
class ImageDataset(Dataset):
def __init__(self, paths, labels):
self.paths = paths
self.labels = labels
def __len__(self):
return len(self.paths)Implémenter __getitem__
__getitem__ charge et renvoie un échantillon (ainsi que son étiquette) à partir d'un indice. C'est ici que vous ouvrez un fichier image et le convertissez en tenseur.
from PIL import Image
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
label = self.labels[idx]
return img, labelPourquoi utiliser des transformations ?
Les images brutes varient en taille et en plage de valeurs des pixels. Les transformations les standardisent : redimensionnement selon une forme fixe, conversion en tenseur et normalisation des valeurs des pixels pour que le modèle s'entraîne de manière stable.
from torchvision import transformstransforms.Compose
transforms.Compose enchaîne plusieurs transformations en une seule chaîne de traitement appliquée dans l'ordre. Une chaîne typique est composée de Resize, puis ToTensor, puis 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])
])Comprendre les transformations
Resize fixe la taille spatiale ; ToTensor convertit une image PIL en tenseur et ramène les pixels dans [0,1] ; Normalize décale et met à l'échelle chaque canal pour obtenir une moyenne nulle et une variance unitaire, ce qui accélère la convergence.
Appliquer les transformations dans le jeu de données
Transmettez la transformation au jeu de données et appliquez-la dans __getitem__, afin que chaque échantillon soit prétraité de manière cohérente au moment de sa récupération.
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]Encapsuler dans un DataLoader
Le DataLoader transforme un jeu de données en un itérable de lots. Définissez batch_size pour contrôler le nombre d'échantillons par étape et shuffle=True pour mélanger l'ordre à chaque époque (ce qui est important pour l'entraînement).
dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)num_workers pour accélérer le chargement
num_workers lance des sous-processus parallèles pour charger et transformer les données pendant que le GPU effectue l'entraînement, masquant ainsi la latence des entrées-sorties. Une valeur comme 4 permet souvent d'alimenter le GPU au lieu de le laisser attendre.
loader = DataLoader(
dataset,
batch_size=32,
shuffle=True,
num_workers=4
)Parcourir les lots
Parcourez le DataLoader pour obtenir des tenseurs regroupés en lots. À chaque itération, vous obtenez (images, labels), où images possède la forme [batch_size, channels, H, W], prête à être transmise au modèle.
for images, labels in loader:
print(images.shape) # torch.Size([32, 3, 224, 224])
breakVérification rapide
Vérifiez vos connaissances sur la chaîne de traitement des données.
Récapitulatif : jeux de données et DataLoaders
Vous avez créé un Dataset personnalisé avec __len__ et __getitem__, prétraité des images avec transforms.Compose (Resize, ToTensor, Normalize), puis encapsulé le tout dans un DataLoader avec batch_size, shuffle et num_workers pour fournir efficacement des lots à votre modèle.
Questions Fréquemment Posées
La leçon « Jeux de données et DataLoaders personnalisés » est-elle gratuite ?
Oui — le texte complet de « Jeux de données et DataLoaders personnalisés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn AI with Python, passe à CoddyKit PRO. Le cours Learn AI with Python comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Jeux de données et DataLoaders personnalisés » ?
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, transformations, augmentation. Tu pratiques Learn AI with Python avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn AI with Python ?
Aucune expérience préalable n'est requise. Learn AI with Python sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Jeux de données et DataLoaders personnalisés » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn AI with Python ?
Oui. Chaque leçon Learn AI with Python inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Tenseurs PyTorch et Autograd
- Jeux de données et DataLoaders personnalisés
- Créer et entraîner des CNN avec PyTorch
- Détection d’objets avec YOLOv8