Dataset e DataLoader personalizzati
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, trasformazioni, data augmentation
Dataset e DataLoader personalizzati è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.
Fornire dati a un modello
L'addestramento richiede un modo efficiente per leggere, trasformare e raggruppare i dati in batch. PyTorch fornisce due astrazioni: Dataset (sa come recuperare un singolo campione) e DataLoader (li raggruppa in batch e li mescola).
from torch.utils.data import Dataset, DataLoaderL'interfaccia Dataset
Una sottoclasse personalizzata di Dataset deve implementare due metodi: __len__ (il numero di campioni) e __getitem__ (restituisce il campione corrispondente a un indice). PyTorch li utilizza per recuperare i dati.
Implementare __len__
__len__ comunica a PyTorch la dimensione del dataset, così sa quanti indici esistono e quanti batch contiene un'epoca.
class ImageDataset(Dataset):
def __init__(self, paths, labels):
self.paths = paths
self.labels = labels
def __len__(self):
return len(self.paths)Implementare __getitem__
__getitem__ carica e restituisce un campione (e la relativa etichetta) dato un indice. È qui che apre un file immagine e lo converte in un tensore.
from PIL import Image
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
label = self.labels[idx]
return img, labelPerché usare le trasformazioni?
Le immagini grezze variano per dimensioni e intervallo dei valori dei pixel. Le trasformazioni le standardizzano: ridimensionano l'immagine a una forma fissa, la convertono in un tensore e normalizzano i valori dei pixel, così il modello può addestrarsi in modo stabile.
from torchvision import transformstransforms.Compose
transforms.Compose concatena più trasformazioni in un'unica pipeline che viene applicata nell'ordine. Una sequenza tipica è Resize, poi ToTensor e infine Normalize.
tf = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])Capire le trasformazioni
Resize imposta la dimensione spaziale; ToTensor converte un'immagine PIL in un tensore e ridimensiona i pixel nell'intervallo [0,1]; Normalize trasla e ridimensiona ogni canale portandolo ad avere media zero e varianza unitaria, accelerando la convergenza.
Applicare le trasformazioni nel Dataset
Passi la trasformazione al dataset e la applichi all'interno di __getitem__, così ogni campione viene preprocessato in modo coerente al momento del recupero.
class ImageDataset(Dataset):
def __init__(self, paths, labels, transform):
self.paths, self.labels, self.transform = paths, labels, transform
def __getitem__(self, idx):
img = Image.open(self.paths[idx]).convert("RGB")
return self.transform(img), self.labels[idx]Racchiudere i dati in un DataLoader
DataLoader trasforma un Dataset in un iterabile di batch. Imposti batch_size per controllare il numero di campioni per passaggio e shuffle=True per randomizzare l'ordine a ogni epoca, una pratica importante durante l'addestramento.
dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)num_workers per aumentare la velocità
num_workers avvia sottoprocessi paralleli per caricare e trasformare i dati mentre la GPU esegue l'addestramento, nascondendo la latenza di I/O. Un valore come 4 spesso mantiene la GPU alimentata con dati invece di lasciarla in attesa.
loader = DataLoader(
dataset,
batch_size=32,
shuffle=True,
num_workers=4
)Iterare sui batch
Iteri sul DataLoader per ottenere tensori raggruppati in batch. Ogni iterazione restituisce (images, labels), dove images ha forma [batch_size, channels, H, W], pronto per il modello.
for images, labels in loader:
print(images.shape) # torch.Size([32, 3, 224, 224])
breakVerifica rapida
Metta alla prova la sua conoscenza della pipeline dei dati.
Riepilogo: Dataset e DataLoader
Ha creato un Dataset personalizzato con __len__ e __getitem__, preprocessato le immagini usando transforms.Compose (Resize, ToTensor, Normalize) e lo ha racchiuso in un DataLoader con batch_size, shuffle e num_workers per fornire batch al modello in modo efficiente.
Domande Frequenti
La lezione «Dataset e DataLoader personalizzati» è gratuita?
Sì — il testo completo di «Dataset e DataLoader personalizzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.
Cosa imparerò in «Dataset e DataLoader personalizzati»?
torch.utils.data.Dataset, __len__/__getitem__, DataLoader, trasformazioni, data augmentation Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn AI with Python?
Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Dataset e DataLoader personalizzati»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?
Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Tensori PyTorch e Autograd
- Dataset e DataLoader personalizzati
- Creazione e addestramento di CNN con PyTorch
- Rilevamento degli oggetti con YOLOv8