Lavorare 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:
123import 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())
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:
- 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;
- Mescolare: randomizzare l'ordine del dataset, aiutando a rompere qualsiasi ordinamento intrinseco nei dati e prevenendo che il modello apprenda schemi spurii;
- Caricamento efficiente: gestire automaticamente il recupero e la pre-elaborazione dei dati per ogni batch durante l'addestramento, riducendo l'overhead.
123456789101112131415161718import 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 )
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)
:
123456789101112131415161718192021222324import 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)
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Lavorare 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:
123import 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())
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:
- 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;
- Mescolare: randomizzare l'ordine del dataset, aiutando a rompere qualsiasi ordinamento intrinseco nei dati e prevenendo che il modello apprenda schemi spurii;
- Caricamento efficiente: gestire automaticamente il recupero e la pre-elaborazione dei dati per ogni batch durante l'addestramento, riducendo l'overhead.
123456789101112131415161718import 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 )
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)
:
123456789101112131415161718192021222324import 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)
Grazie per i tuoi commenti!