CodeBlanks Logo Icon CodeBlanks

Pre-trained model

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 milyon

Ağı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şına

view(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

model.py
import torch

x = torch.full((2, 3, 4, 4), 0.5)

# buraya yaz

Örnek çözüm

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

Soru
ort = torch.tensor([0.485, 0.456, 0.406]).____(1, 3, 1, 1)
Cevap
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

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