Pre-trained model
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 64/78
- 5 dk
Pre-trained model, büyük veri setinde eğitilmiş ve ağırlıkları paylaşılan modeldir.
Önceden eğitilmiş modeller
torchvision.models ResNet, EfficientNet, ViT gibi mimarileri ImageNet ağırlıklarıyla sunar; metin için Hugging Face benzer bir kütüphanedir. Ağırlıklar ilk kullanımda indirilir ve önbelleğe alınır:
from torchvision.models import resnet18, ResNet18_Weights
agirlik = ResNet18_Weights.IMAGENET1K_V1
model = resnet18(weights=agirlik)
onisleme = agirlik.transforms() # modelin eğitimdeki ön işlemesi
print(sum(p.numel() for p in model.parameters())) # ~11.7 milyonAğırlıklarla birlikte gelen transforms() kullanılmalıdır; model, eğitildiği boyut ve normalleştirmeyle aynı girdiyi bekler.
Normalleştirme ve boyut
ImageNet ön işlemesi tipik olarak: yeniden boyutlandırma (256), ortadan kırpma (224), [0, 1]'e ölçekleme ve kanal başına normalleştirme:
ort = torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1)
std = torch.tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1)
x = torch.rand(8, 3, 224, 224) # [0, 1] aralığında görüntüler
x_norm = (x - ort) / std # yayınlama ile kanal başınaview(1, 3, 1, 1), kanal başına değerlerin (N, C, H, W) tensöre doğru eksende yayınlanmasını sağlar.
Uygulama ImageNet normalleştirmesi
Tüm pikselleri 0.5 olan (2, 3, 4, 4) görüntüyü ImageNet ortalama ve std değerleriyle normalleştir. Sonucun şeklini ve her kanalın ilk piksel değerini round(..., 3) uygulanmış liste olarak yazdır.
Başlangıç kodu
import torch
x = torch.full((2, 3, 4, 4), 0.5)
# buraya yazÖrnek çözüm
import torch
x = torch.full((2, 3, 4, 4), 0.5)
ort = torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1)
std = torch.tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1)
x_norm = (x - ort) / std
print(x_norm.shape)
print([round(v, 3) for v in x_norm[0, :, 0, 0].tolist()])Beklenen çıktı
torch.Size([2, 3, 4, 4]) [0.066, 0.196, 0.418]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 ImageNet modelleri için girdiyi neden aynı ortalama ve std ile normalleştiririz?
- Görüntü güzelleşsin diye
- Gerekmez
- GPU için
- Model eğitimde bu dağılımı gördü; farklı girdi performansı düşürür Doğru cevap
Açıklama: Öğrenilen ağırlıklar belirli bir girdi ölçeğine göre ayarlanmıştır.
2 Kanal ortalamalarını yayınlanabilir şekle getir.
ort = torch.tensor([0.485, 0.456, 0.406]).____(1, 3, 1, 1)
ort = torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1)
Açıklama: view(1, 3, 1, 1) değerleri kanal eksenine yerleştirir.
3 Ön işleme adımlarını eşleştir.
| Kavram | Anlamı |
|---|---|
Resize(256) |
Yeniden boyutlandırma |
CenterCrop(224) |
Ortadan kırpma |
ToTensor |
[0, 1] aralığına |
Normalize |
Kanal başına standartlaştırma |