E· Universitetdeep-learning· ca 60 min· utvecklande· verifierad 2026-09-20
Transfer learning
Kunna återanvända en förtränad modell, frysa lager och finjustera huvudet.
Förkunskaper
Intuition
Att träna en bildmodell från grunden kräver hundratusentals bilder. Men en modell som redan tränats på ImageNet har lärt sig kanter, texturer och former — sådant som gäller alla bilder. Byt bara ut sista lagret och lär det dina klasser.
Tre strategier:
| Strategi | När | Hur |
|---|---|---|
| Feature extraction | mycket lite data (< 1 000) | frys allt, träna bara nytt huvud |
| Finjustera toppen | måttligt (1 000–10 000) | frys tidiga lager, träna de sista + huvud |
| Full finjustering | mycket data, eller annan domän | träna allt med låg lr |
Ju mer din data liknar förträningsdatan, desto mer kan du frysa.
Kod
import torch, torch.nn as nn
from torchvision import models
m = models.resnet18(weights="IMAGENET1K_V1")
for p in m.parameters():
p.requires_grad = False # frys allt
m.fc = nn.Linear(m.fc.in_features, 5) # nytt huvud, 5 klasser (tränas)
opt = torch.optim.AdamW(m.fc.parameters(), lr=1e-3)
# … träna huvudet några epoker …
# Steg 2: tina de sista blocken och finjustera med mycket lägre lr
for p in m.layer4.parameters():
p.requires_grad = True
opt = torch.optim.AdamW([
{"params": m.layer4.parameters(), "lr": 1e-5},
{"params": m.fc.parameters(), "lr": 1e-4},
])
Tre fel som kostar procentenheter:
- Fel normalisering. Använd samma medelvärde och std som förträningen (ImageNet: mean
[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]). - För hög lr på förtränade lager. 1e-5 till 1e-4, annars raderas det modellen kan.
- Glömt
model.eval()— batchnorm i resnet uppdaterar sin statistik under träning även för frysta lager om du inte hanterar det.
Behärskning innebär
- Återanvänder en förtränad modell
- Väljer mellan frysning och full finjustering
- Undviker de vanliga felen med normalisering och lr
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- PyTorch — Transfer learning tutorial (BSD-3) — BSD-3-Clause
- Dive into Deep Learning (CC BY-SA 4.0) — CC BY-SA 4.0