Contenu du cours
Essentiels de Pytorch
Essentiels de Pytorch
Travailler avec des Ensembles de Données
Pour simplifier la préparation des données pour les modèles d'apprentissage automatique et permettre un traitement par lots efficace, un mélange et une gestion des données, PyTorch fournit les utilitaires TensorDataset
et DataLoader
.
Chargement et Inspection du Jeu de Données
Nous utiliserons un jeu de données (wine.csv
) contenant des informations sur différents types de vin, y compris leurs caractéristiques et les étiquettes de classe correspondantes.
Tout d'abord, chargeons le jeu de données et inspectons sa structure pour comprendre les caractéristiques et la variable cible :
import pandas as pd wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') print(wine_df.head())
Création d'un TensorDataset
La prochaine étape consiste à séparer les caractéristiques et la cible, les convertir en tenseurs PyTorch, et utiliser ces tenseurs directement pour créer un TensorDataset
. Nous nous assurerons que les caractéristiques sont de type float32
(pour gérer les nombres à virgule flottante) et que la cible est de type long
(un type entier 64 bits adapté pour les étiquettes).
Utilisation de DataLoader pour le traitement par lots
Pour faciliter le traitement par lots, le mélange et le chargement efficace des données pendant l'entraînement, nous enveloppons le TensorDataset
dans un DataLoader
. Cette étape est cruciale pour gérer le flux de données vers le modèle pendant l'entraînement, surtout lorsque l'on travaille avec des ensembles de données plus volumineux. Le DataLoader
nous permet de :
- Traiter par lots : diviser les données en morceaux plus petits et gérables (lots) pour l'entraînement, ce qui optimise l'utilisation de la mémoire et permet des mises à jour de gradient après chaque lot ;
- Mélanger : randomiser l'ordre de l'ensemble de données, ce qui aide à briser tout ordre inhérent dans les données et empêche le modèle d'apprendre des motifs fallacieux ;
- Chargement efficace : gérer automatiquement la récupération et le prétraitement des données pour chaque lot pendant l'entraînement, réduisant ainsi les frais généraux.
import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data )
Avec cette configuration, le DataLoader
garantit que le modèle reçoit des lots de données de manière efficace et dans un ordre aléatoire. Cela est particulièrement important pour l'entraînement des réseaux neuronaux, car cela aide le modèle à mieux généraliser aux données non vues.
Itération sur le DataLoader
Nous pouvons maintenant itérer sur le DataLoader
pour accéder aux lots de données. Chaque lot contient un tuple (batch_features, batch_targets)
:
import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data ) # Iterate through batches for batch_idx, (batch_features, batch_targets) in enumerate(wine_loader): print(f"Batch {batch_idx+1}") print(f"Features: {batch_features}") print(f"Targets: {batch_targets}") print("-" * 30)
Merci pour vos commentaires !