Avantajlar
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 67/78
- 5 dk
Transfer öğrenme, az veriyle yüksek performans sağlar.
Avantajlar ve sınırlar
Transfer öğrenmenin kazançları: daha az veri, daha kısa eğitim, daha yüksek doğruluk ve daha kararlı sonuçlar. Sınırları:
- Alan farkı: önceden eğitilen veri yeni veriden çok farklıysa (doğal fotoğraflar → röntgen) kazanç azalır.
- Girdi uyumu: kanal sayısı, boyut ve normalleştirme modelin beklediğine uymalıdır.
- Boyut: büyük modeller küçük cihazlarda yavaştır.
Alan farkı büyükse daha fazla katmanı ince ayarla eğitmek gerekir.
Ne kadarını eğitmeli?
Veri miktarı ve alan benzerliğine göre kaba bir rehber:
- Az veri, benzer alan: gövdeyi dondur, yalnızca başı eğit.
- Az veri, farklı alan: üst blokları da ince ayarla.
- Çok veri, benzer alan: tüm ağı küçük oranla ince ayarla.
- Çok veri, farklı alan: tümünü ince ayarla ya da sıfırdan eğitmeyi dene.
# ResNet'te yalnızca son bloğu aç:
for ad, p in model.named_parameters():
p.requires_grad = ad.startswith("layer4") or ad.startswith("fc")Uygulama Seçici açma
Önce tüm parametreleri dondur. Ardından adları "0.3." ile başlayan parametreleri (gövdenin ikinci evrişimi) ve baş katmanını ("1.") aç. Eğitilebilir parametre adlarını liste olarak, ardından sayılarını yazdır. Son olarak (2, 1, 16, 16) gri görüntüyü repeat ile üç kanala çevirip şeklini yazdır.
Başlangıç kodu
import torch
from torch import nn
torch.manual_seed(0)
govde = nn.Sequential(
nn.Conv2d(3, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(16, 32, 3, padding=1), nn.ReLU(),
nn.AdaptiveAvgPool2d(1), nn.Flatten())
bas = nn.Linear(32, 1000)
onceden = nn.Sequential(govde, bas)
model = nn.Sequential(govde, nn.Linear(32, 5))
gri = torch.zeros(2, 1, 16, 16)
# buraya yazÖrnek çözüm
import torch
from torch import nn
torch.manual_seed(0)
govde = nn.Sequential(
nn.Conv2d(3, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(16, 32, 3, padding=1), nn.ReLU(),
nn.AdaptiveAvgPool2d(1), nn.Flatten())
bas = nn.Linear(32, 1000)
onceden = nn.Sequential(govde, bas)
model = nn.Sequential(govde, nn.Linear(32, 5))
gri = torch.zeros(2, 1, 16, 16)
for ad, p in model.named_parameters():
p.requires_grad = ad.startswith("0.3.") or ad.startswith("1.")
print([ad for ad, p in model.named_parameters() if p.requires_grad])
print(sum(p.numel() for p in model.parameters() if p.requires_grad))
print(gri.repeat(1, 3, 1, 1).shape)Beklenen çıktı
['0.3.weight', '0.3.bias', '1.weight', '1.bias'] 4805 torch.Size([2, 3, 16, 16])
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Gri tonlu (tek kanallı) tıbbi görüntülerle 3 kanallı ImageNet modeli nasıl kullanılır?
- Kanalı üç kez kopyalayarak ya da ilk katmanı uyarlayarak Doğru cevap
- Kullanılamaz
- Görüntüyü renklendirerek
- Hiçbir değişiklik gerekmez
Açıklama: x.repeat(1, 3, 1, 1) tek kanalı üçe çoğaltır.
2 Tek kanalı üç kanala çoğalt.
x3 = x.____(1, 3, 1, 1)
x3 = x.repeat(1, 3, 1, 1)
Açıklama: repeat her eksen için tekrar sayısı alır.
3 Durumları stratejilerle eşleştir.
| Kavram | Anlamı |
|---|---|
Az veri, benzer alan |
Yalnızca baş |
Az veri, farklı alan |
Üst bloklar + baş |
Çok veri, benzer alan |
Tüm ağ, küçük lr |
Tek kanallı girdi |
repeat(1, 3, 1, 1) |