CodeBlanks Logo Icon CodeBlanks

Avantajlar

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

model.py
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

model.py
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.

Soru
x3 = x.____(1, 3, 1, 1)
Cevap
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)

İleri seviye bölümündeki tüm dersler