Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Lavorare con i Dataset | Concetti Più Avanzati
Fondamenti di PyTorch

bookLavorare con i Dataset

Per semplificare la preparazione dei dati per i modelli di machine learning e abilitare un'efficiente elaborazione in batch, mescolamento e gestione dei dati, PyTorch fornisce le utilità TensorDataset e DataLoader.

Caricamento e Ispezione del Dataset

Utilizzeremo un dataset (wine.csv) contenente dati su diversi tipi di vino, incluse le loro caratteristiche e le relative etichette di classe.

Per prima cosa, carichiamo il dataset e ispezioniamo la sua struttura per comprendere le caratteristiche e la variabile target:

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

Creazione di un TensorDataset

Il passo successivo consiste nel separare le feature e il target, convertirli in tensori PyTorch e utilizzare direttamente questi tensori per creare un TensorDataset. Verrà garantito che le feature siano di tipo float32 (per la gestione dei numeri in virgola mobile) e il target sia di tipo long (un intero a 64 bit adatto per le etichette).

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
)

Utilizzo di DataLoader per l'elaborazione a batch

Per facilitare l'elaborazione a batch, la mescolatura e il caricamento efficiente dei dati durante l'addestramento, si incapsula il TensorDataset in un DataLoader. Questo passaggio è fondamentale per gestire il flusso di dati verso il modello durante l'addestramento, soprattutto quando si lavora con dataset di grandi dimensioni. Il DataLoader consente di:

  1. Elaborare a batch: suddividere i dati in blocchi più piccoli e gestibili (batch) per l'addestramento, ottimizzando l'uso della memoria e permettendo l'aggiornamento dei gradienti dopo ogni batch;
  2. Mescolare: randomizzare l'ordine del dataset, aiutando a rompere qualsiasi ordinamento intrinseco nei dati e prevenendo che il modello apprenda schemi spurii;
  3. Caricamento efficiente: gestire automaticamente il recupero e la pre-elaborazione dei dati per ogni batch durante l'addestramento, riducendo l'overhead.
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

Con questa configurazione, il DataLoader garantisce che il modello riceva batch di dati in modo efficiente e in ordine casuale. Questo è particolarmente importante per l'addestramento delle reti neurali, poiché aiuta il modello a generalizzare meglio su dati non visti.

Iterazione sul DataLoader

Ora possiamo iterare sul DataLoader per accedere ai batch di dati. Ogni batch contiene una tupla (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

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain what the output of the DataLoader iteration looks like?

How do I change the batch size in the DataLoader?

What should I do if my dataset has missing values?

Awesome!

Completion rate improved to 5

bookLavorare con i Dataset

Scorri per mostrare il menu

Per semplificare la preparazione dei dati per i modelli di machine learning e abilitare un'efficiente elaborazione in batch, mescolamento e gestione dei dati, PyTorch fornisce le utilità TensorDataset e DataLoader.

Caricamento e Ispezione del Dataset

Utilizzeremo un dataset (wine.csv) contenente dati su diversi tipi di vino, incluse le loro caratteristiche e le relative etichette di classe.

Per prima cosa, carichiamo il dataset e ispezioniamo la sua struttura per comprendere le caratteristiche e la variabile target:

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

Creazione di un TensorDataset

Il passo successivo consiste nel separare le feature e il target, convertirli in tensori PyTorch e utilizzare direttamente questi tensori per creare un TensorDataset. Verrà garantito che le feature siano di tipo float32 (per la gestione dei numeri in virgola mobile) e il target sia di tipo long (un intero a 64 bit adatto per le etichette).

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
)

Utilizzo di DataLoader per l'elaborazione a batch

Per facilitare l'elaborazione a batch, la mescolatura e il caricamento efficiente dei dati durante l'addestramento, si incapsula il TensorDataset in un DataLoader. Questo passaggio è fondamentale per gestire il flusso di dati verso il modello durante l'addestramento, soprattutto quando si lavora con dataset di grandi dimensioni. Il DataLoader consente di:

  1. Elaborare a batch: suddividere i dati in blocchi più piccoli e gestibili (batch) per l'addestramento, ottimizzando l'uso della memoria e permettendo l'aggiornamento dei gradienti dopo ogni batch;
  2. Mescolare: randomizzare l'ordine del dataset, aiutando a rompere qualsiasi ordinamento intrinseco nei dati e prevenendo che il modello apprenda schemi spurii;
  3. Caricamento efficiente: gestire automaticamente il recupero e la pre-elaborazione dei dati per ogni batch durante l'addestramento, riducendo l'overhead.
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

Con questa configurazione, il DataLoader garantisce che il modello riceva batch di dati in modo efficiente e in ordine casuale. Questo è particolarmente importante per l'addestramento delle reti neurali, poiché aiuta il modello a generalizzare meglio su dati non visti.

Iterazione sul DataLoader

Ora possiamo iterare sul DataLoader per accedere ai batch di dati. Ogni batch contiene una tupla (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

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 5
some-alt