Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Travail Avec les Ensembles de Données | Concepts Plus Avancés
Essentiels de PyTorch

bookTravail Avec les 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, le mélange aléatoire et la gestion des données, PyTorch propose 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, incluant leurs caractéristiques et les étiquettes de classe correspondantes.

Tout d'abord, procédons au chargement du jeu de données et inspectons sa structure afin de 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

L'étape suivante consiste à séparer les caractéristiques et la cible, les convertir en tenseurs PyTorch, puis à utiliser ces tenseurs directement pour créer un TensorDataset. Nous veillerons à ce que les caractéristiques soient de type float32 (pour la gestion des nombres à virgule flottante) et que la cible soit de type long (un entier 64 bits adapté aux étiquettes).

import pandas as pd
import torch
from torch.utils.data import TensorDataset
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
)

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 encapsulons le TensorDataset dans un DataLoader. Cette étape est essentielle pour gérer le flux de données vers le modèle lors de l'entraînement, en particulier lors du traitement de grands ensembles de données. Le DataLoader permet de :

  1. Traiter par lots : diviser les données en petits groupes gérables (lots) pour l'entraînement, ce qui optimise l'utilisation de la mémoire et permet des mises à jour du gradient après chaque lot ;
  2. Mélanger : randomiser l'ordre de l'ensemble de données, ce qui aide à casser tout ordre inhérent dans les données et empêche le modèle d'apprendre des schémas non pertinents ;
  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 la surcharge.
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. Ceci est particulièrement important pour l'entraînement des réseaux de neurones, car cela aide le modèle à mieux généraliser sur des données non vues.

Parcours du DataLoader

Nous pouvons maintenant parcourir 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

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 5

bookTravail Avec les Ensembles de Données

Glissez pour afficher le menu

Pour simplifier la préparation des données pour les modèles d'apprentissage automatique et permettre un traitement par lots efficace, le mélange aléatoire et la gestion des données, PyTorch propose 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, incluant leurs caractéristiques et les étiquettes de classe correspondantes.

Tout d'abord, procédons au chargement du jeu de données et inspectons sa structure afin de 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

L'étape suivante consiste à séparer les caractéristiques et la cible, les convertir en tenseurs PyTorch, puis à utiliser ces tenseurs directement pour créer un TensorDataset. Nous veillerons à ce que les caractéristiques soient de type float32 (pour la gestion des nombres à virgule flottante) et que la cible soit de type long (un entier 64 bits adapté aux étiquettes).

import pandas as pd
import torch
from torch.utils.data import TensorDataset
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
)

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 encapsulons le TensorDataset dans un DataLoader. Cette étape est essentielle pour gérer le flux de données vers le modèle lors de l'entraînement, en particulier lors du traitement de grands ensembles de données. Le DataLoader permet de :

  1. Traiter par lots : diviser les données en petits groupes gérables (lots) pour l'entraînement, ce qui optimise l'utilisation de la mémoire et permet des mises à jour du gradient après chaque lot ;
  2. Mélanger : randomiser l'ordre de l'ensemble de données, ce qui aide à casser tout ordre inhérent dans les données et empêche le modèle d'apprendre des schémas non pertinents ;
  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 la surcharge.
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. Ceci est particulièrement important pour l'entraînement des réseaux de neurones, car cela aide le modèle à mieux généraliser sur des données non vues.

Parcours du DataLoader

Nous pouvons maintenant parcourir 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
some-alt