Finetuning: frigivelse og genindlæring
base_model.trainable = True, frigivelse lag for lag, differentierede learning rates.
Finetuning: frigivelse og genindlæring er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær AI med Python, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær AI med Python-kurset indeholder 4 lektioner i alt.
Hvornår skal du finjustere
Når udtrækket af egenskaber har trænet dit hoved, henter finjustering den sidste ekstra nøjagtighed ved at lade toppen af det fortrænede basisnetværk tilpasse sig dine data. Gør det først, når hovedet er stabilt, ellers kan store gradienter fra et tilfældigt hoved beskadige basisnetværket.
Frigørelse af basisnetværket
Sæt base.trainable = True for at gøre vægtene opdaterbare igen. I sig selv frigiver dette alle lag, hvilket normalt er for aggressivt.
base.trainable = True
print("Trainable layers:", sum(l.trainable for l in base.layers))Fastfrys de første N lag
De tidlige lag indeholder generelle detektorer for kanter og teksturer, som du gerne vil bevare. Fastfrys de første N lag igen, og finjustér kun de dybere, opgavespecifikke lag.
base.trainable = True
freeze_until = 100 # keep first 100 layers frozen
for layer in base.layers[:freeze_until]:
layer.trainable = False
for layer in base.layers[freeze_until:]:
layer.trainable = TrueHvorfor en meget lav læringsrate
Finjustering kræver en meget lav læringsrate som 1e-5. De fortrænede vægte er allerede gode; du ønsker kun forsigtige justeringer. En høj rate medfører katastrofal glemsel og sletter den ImageNet-viden, du netop tog udgangspunkt i.
Kompilér igen efter frigørelse
Du skal kompilere igen efter at have ændret trainable-flagene, så Keras genopbygger oversigten over, hvilke vægte der får gradienter. Angiv den lave læringsrate her.
from tensorflow.keras.optimizers import Adam
model.compile(
optimizer=Adam(learning_rate=1e-5),
loss="categorical_crossentropy",
metrics=["accuracy"]
)Processen i to faser
- Fase 1 (udtræk af egenskaber): basisnetværket er fastfrosset, og hovedet trænes ved cirka 1e-3, indtil valideringsnøjagtigheden flader ud.
- Fase 2 (finjustering): frigiv de øverste lag, kompilér igen ved cirka 1e-5, og fortsæt træningen.
Ved at dele processen op på denne måde stabiliseres træningen, og de fortrænede egenskaber beskyttes.
Fortsæt træningen i fase 2
Genoptag træningen fra det sted, hvor fase 1 stoppede, ved hjælp af initial_epoch, så logfiler og tidsplaner forbliver sammenhængende.
history2 = model.fit(
train_ds,
validation_data=val_ds,
epochs=20,
initial_epoch=10 # phase 1 ended at epoch 10
)Planlægning af læringsraten
En planlægger sænker læringsraten over tid, så opdateringerne bliver mindre, efterhånden som modellen konvergerer. ReduceLROnPlateau sænker den automatisk, når valideringstabet står stille.
from tensorflow.keras.callbacks import ReduceLROnPlateau
lr_cb = ReduceLROnPlateau(
monitor="val_loss", factor=0.5,
patience=2, min_lr=1e-7
)
model.fit(train_ds, validation_data=val_ds,
epochs=20, callbacks=[lr_cb])Vær forsigtig med BatchNorm
ResNet og EfficientNet indeholder BatchNormalization-lag, som holder styr på løbende statistikker. Under finjustering giver det ofte mere stabile resultater at holde BN-lagene fastfrosset (eller i inferenstilstand), fordi opdatering af deres statistikker på et lille datasæt kan forringe nøjagtigheden.
Vær opmærksom på overtilpasning
Finjustering tilføjer mange trænbare parametre, så risikoen for overtilpasning stiger. Bekæmp den med dataforøgelse, dropout og EarlyStopping baseret på valideringstabet.
from tensorflow.keras.callbacks import EarlyStopping
stop = EarlyStopping(monitor="val_loss",
patience=4,
restore_best_weights=True)Sæt det hele sammen
En robust finjusteringskørsel består af at træne hovedet, ophæve frysningen af de øverste lag, fryse BN, rekompilere med 1e-5 og derefter træne med en planlægger og tidligt stop. Sammenlign altid valideringsnøjagtigheden før og efter for at bekræfte, at finjusteringen faktisk hjalp.
Hurtigt tjek
Test din viden om finjustering.
Opsummering
Du lærte at finjustere ved at indstille base.trainable=True, fryse de første N lag igen, rekompilere med en meget lille læringsrate (1e-5) og gennemføre en proces i to faser. En planlægger for læringsraten og tidligt stop holder processen stabil, og BatchNorm-lag kræver særlig opmærksomhed. Næste emne: letvægtsmodeller til implementering på edge-enheder.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 53
- Lektioner
- 225
Ofte stillede spørgsmål
Er lektionen “Finetuning: frigivelse og genindlæring” gratis?
Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “Finetuning: frigivelse og genindlæring”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær AI med Python-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Finetuning: frigivelse og genindlæring”?
base_model.trainable = True, frigivelse lag for lag, differentierede learning rates. Du øver dig i Lær AI med Python med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lær AI med Python?
Der kræves ingen tidligere erfaring. Lær AI med Python på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Finetuning: frigivelse og genindlæring”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lær AI med Python-lektion?
Ja. Alle Lær AI med Python-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Begreber og strategier inden for transfer learning
- Brug af VGG16 og ResNet50 som basismodeller
- Finetuning: frigivelse og genindlæring
- MobileNet og EfficientNet til edge-deployment