Feature map
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 44/78
- 5 dk
Conv2d çıktısı, öğrenilen özellik haritasıdır (feature map).
Özellik haritası
Her filtrenin çıktısı bir özellik haritasıdır: filtrenin aradığı desenin görüntünün neresinde ne kadar güçlü bulunduğunu gösterir. Katmanlar ilerledikçe haritalar küçülür ama kanal sayısı artar:
# girdi (N, 3, 32, 32)
# blok 1 -> (N, 32, 16, 16) kenarlar, renkler
# blok 2 -> (N, 64, 8, 8) dokular, parçalar
# blok 3 -> (N, 128, 4, 4) nesne parçalarıDerin katmanlardaki her nöron özgün görüntünün daha büyük bir bölgesine bakar; buna alıcı alan (receptive field) denir.
Blok yapısı
Bir CNN bloğu genellikle evrişim, normalleştirme, aktivasyon ve havuzlamadan oluşur. Blokları bir fonksiyonla üretmek kodu kısaltır:
def blok(giris, cikis):
return nn.Sequential(
nn.Conv2d(giris, cikis, 3, padding=1),
nn.BatchNorm2d(cikis),
nn.ReLU(),
nn.MaxPool2d(2))
govde = nn.Sequential(blok(3, 32), blok(32, 64), blok(64, 128))
print(govde(torch.zeros(1, 3, 32, 32)).shape) # torch.Size([1, 128, 4, 4])BatchNorm2d her kanalın aktivasyonlarını normalleştirerek eğitimi hızlandırır ve kararlı yapar.
Uygulama Gövde şekilleri
Verilen blok fonksiyonuyla üç bloklu bir gövde kur (3→16→32→64 kanal). (2, 3, 64, 64) girdi için her bloktan sonraki şekli alt alta yazdır.
Başlangıç kodu
import torch
from torch import nn
def blok(giris, son):
return nn.Sequential(nn.Conv2d(giris, son, 3, padding=1), nn.BatchNorm2d(son), nn.ReLU(), nn.MaxPool2d(2))
x = torch.zeros(2, 3, 64, 64)
# buraya yazÖrnek çözüm
import torch
from torch import nn
def blok(giris, son):
return nn.Sequential(nn.Conv2d(giris, son, 3, padding=1), nn.BatchNorm2d(son), nn.ReLU(), nn.MaxPool2d(2))
x = torch.zeros(2, 3, 64, 64)
govde = nn.Sequential(blok(3, 16), blok(16, 32), blok(32, 64))
for b in govde:
x = b(x)
print(x.shape)Beklenen çıktı
torch.Size([2, 16, 32, 32]) torch.Size([2, 32, 16, 16]) torch.Size([2, 64, 8, 8])
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İki ardışık 3×3 evrişimin (stride 1) alıcı alanı kaç piksel genişliğindedir?
- 3
- 9
- 5 Doğru cevap
- 6
Açıklama: Her 3×3 katman alıcı alanı 2 piksel büyütür: 3 + 2 = 5.
2 Kanal başına normalleştirme ekle.
nn.____(32)
nn.BatchNorm2d(32)
Açıklama: BatchNorm2d kanal sayısını parametre olarak alır.
3 Katmanları eşleştir.
| Kavram | Anlamı |
|---|---|
Conv2d |
Desen çıkarır |
BatchNorm2d |
Normalleştirir |
ReLU |
Doğrusal olmama |
MaxPool2d |
Küçültür |