Training Data
I dati di addestramento sono l’insieme di esempi da cui un modello apprende i propri pesi. Scopri come differiscono dai dati di validazione e di test e perché la qualità delle etichette è importante quanto la quantità.
I dati di training sono l’insieme di esempi da cui apprende un modello di machine learning. Durante il training, un ottimizzatore modifica ripetutamente i pesi del modello per ridurne l’errore su questi esempi, che definiscono quindi ciò che il modello può imparare. Nell’apprendimento supervisionato, ogni esempio associa un input alla risposta corretta, come una foto di strada con un riquadro di delimitazione e il nome della classe per ogni auto e pedone. L’apprendimento autosupervisionato e l’apprendimento non supervisionato usano input grezzi senza etichette. L’espressione set di training è sinonima e, nella maggior parte dei progetti, questo è la suddivisione più grande dei dati disponibili, spesso pari al 70-80%.
Come i modelli usano i dati di training#
Un modello elabora i dati di training in batch. Per ogni batch produce previsioni, una funzione di perdita misura quanto si discostano dalle etichette, la propagazione all’indietro calcola il contributo di ciascun peso all’errore e l’ottimizzatore modifica leggermente i pesi per ridurlo. Un passaggio completo sul set di training è un’epoca e il training dura di solito da decine a centinaia di epoche.
Poiché il modello viene ottimizzato proprio su questi esempi, il punteggio ottenuto su di essi sovrastima le prestazioni sui nuovi dati. Due suddivisioni tenute da parte permettono di correggere questa distorsione. I dati di validazione vengono valutati durante lo sviluppo per scegliere iperparametri e checkpoint, mentre i dati di test vengono valutati una sola volta alla fine per stimare le prestazioni nel mondo reale. Un ampio divario tra i punteggi di training e di validazione segnala overfitting: il modello memorizza gli esempi di training invece di imparare schemi generalizzabili. Punteggi bassi in entrambi i casi indicano underfitting. Le suddivisioni non devono condividere immagini: frame quasi identici dello stesso video o scansioni dello stesso paziente presenti in entrambe causano data leakage e gonfiano tutti i punteggi di valutazione.
Quantità, qualità e copertura#
Tre proprietà di un set di training determinano quanto bene un modello riesce a generalizzare:
- Quantità: un maggior numero di esempi è utile, ma i benefici diminuiscono progressivamente. Partire da un modello preaddestrato con il transfer learning riduce il numero di esempi etichettati necessari per un nuovo compito.
- Qualità: ogni etichetta errata, mancante o disegnata in modo incoerente insegna al modello qualcosa di falso. Le linee guida coerenti per l’etichettatura dei dati sono importanti quanto il numero di etichette.
- Copertura: Gli esempi devono coprire le condizioni che il modello dovrà affrontare, come illuminazione, condizioni meteorologiche, angoli della telecamera, sfondi e classi rare. Un rilevatore addestrato solo su immagini diurne non funziona di notte; se le lacune seguono linee demografiche, ad esempio se mancano tonalità della pelle in un dataset di volti, diventano bias del dataset.
Lo script scikit-learn qui sotto addestra lo stesso classificatore sul dataset incluso di cifre scritte a mano, usando set di training diversi, e valuta ogni modello sulla stessa suddivisione di test:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 1,797 labeled 8x8 digit images; hold out 30% to score every model
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
# Reassign 30% of the training labels at random to simulate careless labeling
rng = np.random.default_rng(0)
y_noisy = y_train.copy()
flip = rng.random(len(y_train)) < 0.3
y_noisy[flip] = rng.integers(0, 10, flip.sum())
# Train the same model on three different training sets
for name, n, labels in [("50 clean", 50, y_train), ("1,257 clean", 1257, y_train), ("1,257 noisy", 1257, y_noisy)]:
model = LogisticRegression(max_iter=5000).fit(X_train[:n], labels[:n])
print(f"{name}: test accuracy {model.score(X_test, y_test):.3f}")Aumentando il set di training pulito da 50 a 1,257 immagini, l’accuratezza sul test passa da 0.863 a 0.961. L’esecuzione con etichette rumorose, in cui 315 delle 1,257 etichette (il 25%) risultano errate, ottiene 0.861: non meglio del modello addestrato su 50 immagini pulite.
Creare un set di training#
I team assemblano i dati di training da dataset pubblici, dalle proprie telecamere e dai log, e sempre più spesso da dati sintetici. I benchmark pubblici offrono un ottimo punto di partenza: il dataset COCO contiene 118,287 immagini di training etichettate per il rilevamento, la segmentazione e la generazione di didascalie. Le raccolte grezze vengono poi sottoposte a pulizia dei dati per rimuovere duplicati, file danneggiati e immagini non pertinenti, quindi a etichettatura e revisione. Durante il training, l’aumento dei dati moltiplica la varietà del set con ribaltamenti, ritagli, variazioni cromatiche e mosaici, ma può solo ricombinare ciò che è stato raccolto; una condizione mancante deve quindi essere fotografata.
Ultralytics YOLO legge i dati di training dal percorso train di un file YAML del dataset e abbina ogni immagine a un file di etichette .txt contenente una riga per oggetto: un indice di classe seguito dal centro, dalla larghezza e dall’altezza del riquadro, normalizzati rispetto alle dimensioni dell’immagine. Tutte le suddivisioni usano lo stesso formato del dataset YOLO, quindi per riequilibrarle occorre spostare immagini e relativi file di etichette tra le cartelle.
from ultralytics import YOLO
# Carica un modello nano YOLO26 preaddestrato
model = YOLO("yolo26n.pt")
# coco8.yaml elenca le immagini di training (train: images/train) e quelle di validazione (val: images/val)
results = model.train(data="coco8.yaml", epochs=5)Il modello YOLO26 esegue il fine-tuning sulle quattro immagini di training di COCO8, un campione minuscolo usato per verificare che una pipeline di training venga eseguita dall’inizio alla fine.
Dati di training a confronto con termini correlati#
- Dati di validazione: una suddivisione tenuta da parte che guida le decisioni durante lo sviluppo, ad esempio quando interrompere il training. Il modello non aggiorna mai i propri pesi su questi dati.
- Dati di test: una suddivisione tenuta da parte, valutata una sola volta alla fine, il cui risultato fornisce una stima imparziale delle prestazioni sui nuovi dati.
- Verità di riferimento: le risposte corrette associate agli esempi. Nell’apprendimento supervisionato, i dati di training includono la verità di riferimento, ma tutte le suddivisioni ne hanno bisogno per la valutazione.
- Dataset dorato: Un piccolo insieme di dati verificato da esperti, usato come riferimento affidabile per la valutazione e i controlli sulla qualità delle annotazioni.
- Dataset di benchmark: Un dataset pubblico con suddivisioni fisse, usato per confrontare i modelli. La suddivisione di training spesso funge anche da dati di pretraining, mentre quella tenuta da parte diventa la classifica, come accade con la suddivisione COCO val2017 di 5.000 immagini, su cui molti articoli sulla rilevazione riportano mAP.










