Concetti e strategie del transfer learning
Estrazione delle feature e fine-tuning a confronto, layer congelati, quando il transfer learning è utile
Concetti e strategie del transfer learning è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 1 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.
Che cos'è il transfer learning
Il transfer learning riutilizza un modello addestrato su un dataset di grandi dimensioni come punto di partenza per un'attività nuova e correlata. Invece di imparare da zero le caratteristiche visive, si riutilizzano quelle già apprese dalla rete.
Questo riduce drasticamente la quantità di dati e di risorse di calcolo necessarie per raggiungere un'elevata accuratezza.
La base ImageNet
La maggior parte dei modelli di visione pre-addestrati viene addestrata su ImageNet: circa 1,4 milioni di immagini distribuite in 1000 classi.
Durante questo addestramento, la rete apprende una gerarchia di feature: bordi e colori nei layer iniziali, texture nei layer intermedi e parti degli oggetti verso la cima della rete. Queste feature di basso livello si trasferiscono bene a quasi tutti i task di elaborazione delle immagini.
Perché le feature iniziali vengono trasferite
I primi layer convoluzionali rilevano pattern generici, come bordi, forme e gradienti, che compaiono in ogni immagine naturale, che si tratti di gatti, radiografie o foto satellitari.
I layer più profondi diventano più specifici per il task, perché assemblano quei bordi nelle parti degli oggetti di ImageNet. Per questo, di solito manteniamo i layer iniziali e sostituiamo o riaddestriamo quelli successivi.
Strategia 1: estrazione delle feature
La feature extraction blocca ogni layer della base pre-addestrata, così i suoi pesi non cambiano mai. La base agisce come un estrattore di feature fisso; si addestra soltanto una nuova e piccola testa di classificazione.
Utilizzi questa strategia quando il dataset è piccolo e simile a ImageNet. È veloce e resiste all'overfitting, perché sono addestrabili pochi parametri.
base.trainable = False
model = Sequential([
base, # frozen ImageNet features
GlobalAveragePooling2D(),
Dense(num_classes, activation="softmax") # only this trains
])Strategia 2: fine-tuning
Il fine-tuning sblocca i layer superiori della base e li riaddestra insieme alla testa, consentendo alla rete di adattare le proprie feature di alto livello ai dati specifici.
Utilizzi questa strategia quando dispone di più dati o quando il dominio differisce da ImageNet, ad esempio nel caso delle immagini mediche. Esegua sempre il fine-tuning con un learning rate molto basso per evitare di danneggiare i pesi pre-addestrati.
Estrazione delle feature o fine-tuning
- Estrazione delle feature: base bloccata, si addestra solo la testa, molto veloce, ideale per dati pochi e simili.
- Fine-tuning: layer superiori della base sbloccati e testa addestrata insieme, più lento, ideale per dati più numerosi o diversi.
Un approccio comune consiste nell'eseguire prima l'estrazione delle feature e poi il fine-tuning in una seconda fase, quando la testa si è stabilizzata.
Requisiti in termini di quantità di dati
La quantità di dati a disposizione determina la strategia:
- Alcune centinaia di immagini: esegua solo l'estrazione delle feature, mantenendo tutto bloccato.
- Alcune migliaia: esegua l'estrazione delle feature, quindi il fine-tuning dei pochi layer superiori.
- Decine di migliaia o più: esegua il fine-tuning di una porzione più ampia della base, eventualmente dell'intera rete.
Meno dati significa bloccare un numero maggiore di layer, perché un numero inferiore di parametri addestrabili riduce il rischio di overfitting.
Sostituire la testa di classificazione
I modelli ImageNet restituiscono 1000 classi. Probabilmente il suo task prevede un numero diverso di classi, quindi rimuova lo strato superiore originale (include_top=False) e colleghi una testa dimensionata per le proprie classi.
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.2)(x)
outputs = layers.Dense(5, activation="softmax")(x) # 5 custom classes
model = Model(base.input, outputs)Il preprocessing deve corrispondere
Ogni famiglia di modelli pre-addestrati si aspetta input scalati nello stesso modo usato durante l'addestramento su ImageNet. Usare il preprocess_input corrispondente è essenziale, altrimenti l'accuratezza crolla.
from tensorflow.keras.applications.resnet50 import preprocess_input
# Scale pixels exactly as ResNet50 expects
x = preprocess_input(raw_image_batch)Disciplina del learning rate
Durante l'estrazione delle feature, un learning rate normale, ad esempio 1e-3, va bene perché viene addestrata soltanto la nuova testa.
Durante il fine-tuning deve ridurlo a un valore piccolissimo, come 1e-5. Aggiornamenti troppo grandi cancellerebbero i pesi ImageNet appresi con cura: questo effetto si chiama catastrophic forgetting.
Un flusso di lavoro tipico
- Carichi una base pre-addestrata con
include_top=False. - La blocchi e addestri una nuova testa, eseguendo la feature extraction.
- Sblocchi i layer superiori e li riaddestri con un learning rate molto basso, eseguendo il fine-tuning.
- Valuti il modello e lo converta per il deployment.
Questo approccio graduale offre un'elevata accuratezza anche con dataset di dimensioni moderate.
Verifica rapida
Verifichi la propria comprensione delle strategie di transfer learning.
Riepilogo
Ha appreso che il transfer learning riutilizza le feature pre-addestrate su ImageNet, con 1,4 milioni di immagini e 1000 classi. La feature extraction mantiene la base bloccata per dataset piccoli e simili; il fine-tuning sblocca i layer superiori con un learning rate molto basso per dati più numerosi o diversi.
Abbini il preprocessing alla base, sostituisca la testa con una adatta alle proprie classi e utilizzi un flusso di lavoro graduale. Ora applicheremo questi concetti al codice con VGG16 e ResNet50.
Domande Frequenti
La lezione «Concetti e strategie del transfer learning» è gratuita?
Sì — il testo completo di «Concetti e strategie del transfer learning» è 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 «Concetti e strategie del transfer learning»?
Estrazione delle feature e fine-tuning a confronto, layer congelati, quando il transfer learning è utile 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 1 di 4.
Quanto tempo richiede la lezione «Concetti e strategie del transfer learning»?
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
- Concetti e strategie del transfer learning
- Utilizzo di VGG16 e ResNet50 come modelli di base
- Fine-tuning: scongelamento e riaddestramento
- MobileNet ed EfficientNet per il deployment su dispositivi edge