Makine Öğrenmesi
Transfer öğrenme nedir?
Transfer öğrenme, önceden eğitilmiş bir modeli yeni göreve uyarlar.
Transfer öğrenme nedir?
Transfer öğrenme, büyük bir veri setinde (ImageNet'in 1.2 milyon görüntüsü gibi) eğitilmiş bir modelin öğrendiklerini yeni ve genellikle küçük bir probleme taşımaktır. Alt katmanlar kenar, doku, şekil gibi genel özellikleri öğrendiği için bu bilgi başka görevlerde de işe yarar.
import torchvision
model = torchvision.models.resnet18(weights="IMAGENET1K_V1") # önceden eğitilmiş
model.fc = nn.Linear(model.fc.in_features, 5) # 5 sınıflı yeni görev
Birkaç yüz görüntüyle sıfırdan eğitilen bir CNN zayıf kalırken, önceden eğitilmiş bir modelden başlamak çoğu zaman yüksek doğruluk verir.
Gövde ve baş
Bir sınıflandırma ağı iki parçadan oluşur: özellik çıkaran gövde (backbone) ve bu özelliklerden sınıf skorları üreten baş (head). Transfer öğrenmede gövde korunur, baş yeni görevin sınıf sayısına göre değiştirilir:
# önceden eğitilmiş: govde -> Linear(512, 1000) (ImageNet'in 1000 sınıfı)
# yeni görev: govde -> Linear(512, 5) (yeni baş, rastgele başlar)
Gövdenin son katmanı sınıfa özgüyken alt katmanlar daha geneldir; ne kadarının yeniden eğitileceği veri miktarına göre seçilir.
Uygulama Başı değiştir
"Önceden eğitilmiş" bir modeli taklit eden onceden (gövde + 1000 sınıflı baş) verildi. Yeni bir model kur: aynı govde ve nn.Linear(bas.in_features, 5). (4, 3, 32, 32) girdinin eski ve yeni çıktı şekillerini alt alta yazdır.
Örnek çözümü göster
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)
x = torch.zeros(4, 3, 32, 32)
yeni = nn.Sequential(govde, nn.Linear(bas.in_features, 5))
print(onceden(x).shape)
print(yeni(x).shape)
Kendini test et
-
Transfer öğrenme en çok hangi durumda fark yaratır?
- Yeni görevde az etiketli veri varken
- Milyonlarca etiketli örnek varken
- Veri tablo biçimindeyken
- Hiçbir zaman
Cevabı göster
Yeni görevde az etiketli veri varken — Önceden öğrenilmiş genel özellikler, az veriyle öğrenilemeyecek bilgiyi sağlar.
-
Yeni görev için baş katmanını değiştir.
model.fc = nn.Linear(model.fc.____, 5)
Cevabı göster
model.fc = nn.Linear(model.fc.in_features, 5)
-
Kavramları eşleştir.
- gövde
- Genel özellikler
- baş
- Göreve özgü sınıflandırıcı
- önceden eğitilmiş
- Büyük veride öğrenilmiş
- in_features
- Gövde çıktı boyutu
Sıradaki ders: Pre-trained model