Makine Öğrenmesi
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.
Örnek çözümü göster
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()])
Kendini test et
-
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
Cevabı göster
Model eğitimde bu dağılımı gördü; farklı girdi performansı düşürür — Öğrenilen ağırlıklar belirli bir girdi ölçeğine göre ayarlanmıştır.
-
Kanal ortalamalarını yayınlanabilir şekle getir.
ort = torch.tensor([0.485, 0.456, 0.406]).____(1, 3, 1, 1)
Cevabı göster
ort = torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1)
-
Ön işleme adımlarını eşleştir.
- Resize(256)
- Yeniden boyutlandırma
- CenterCrop(224)
- Ortadan kırpma
- ToTensor
- [0, 1] aralığına
- Normalize
- Kanal başına standartlaştırma
Sıradaki ders: Fine-tuning