Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Travailler avec des Ensembles de Données | Concepts Plus Avancés
Essentiels de Pytorch
course content

Contenu du cours

Essentiels de Pytorch

Essentiels de Pytorch

1. Introduction à PyTorch
2. Concepts Plus Avancés
3. Réseaux Neuronaux dans PyTorch

book
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 :

123
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())
copy

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 :

  1. 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 ;
  2. 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 ;
  3. 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.
123456789101112131415161718
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 )
copy

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) :

123456789101112131415161718192021222324
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)
copy

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 5
We're sorry to hear that something went wrong. What happened?
some-alt