Evreşimsel Sinir Ağları

PyTorch ile Orta Düzey Deep Learning

Michal Oleszak

Machine Learning Engineer

Neden doğrusal katmanlar değil?

256x256 gri tonlamalı bir görüntüyü temsil eden siyah bir kare.

PyTorch ile Orta Düzey Deep Learning

Neden doğrusal katmanlar değil?

256x256 gri tonlamalı bir görüntü yaklaşık 65 bin piksel değeri içerir.

PyTorch ile Orta Düzey Deep Learning

Neden doğrusal katmanlar değil?

65 bin piksel değeri, 1000 nöronlu bir doğrusal katman tarafından işlenir.

PyTorch ile Orta Düzey Deep Learning

Neden doğrusal katmanlar değil?

Görüntü ile katman arasında 65 milyon bağlantı vardır.

PyTorch ile Orta Düzey Deep Learning

Neden doğrusal katmanlar değil?

RGB renkli bir görüntü ile 200 milyon bağlantı vardır.

PyTorch ile Orta Düzey Deep Learning

Neden doğrusal katmanlar değil?

  • Doğrusal katmanlar:
    • Yavaş eğitim
    • Aşırı uyum
    • Uzamsal örüntüleri tanımaz
  • Daha iyi bir seçenek: evreşim (convolution) katmanları!

Köşede kedi olan bir görüntü ve nöronların yalnızca o kısmı okuması

PyTorch ile Orta Düzey Deep Learning

Evreşim katmanı

3x3 boyutlu bir filtre, 5x5 giriş üzerinde kayarak 3x3 boyutunda bir öznitelik haritası üretir.

  • Parametreli filtre(ler)i girdi üzerinde kaydırın
  • Her konumda evreşim uygulayın
  • Ortaya çıkan öznitelik haritası:
    • Girdinin uzamsal örüntülerini korur
    • Doğrusal katmana göre daha az parametre kullanır
  • Bir filtre = bir öznitelik haritası
  • Öznitelik haritalarına aktivasyon uygulayın
  • Tüm öznitelik haritaları birleştirilerek çıktı oluşur
  • nn.Conv2d(3, 32, kernel_size=3)
PyTorch ile Orta Düzey Deep Learning

Evreşim

İki 3x3 matris, eleman bazında çarpılır ve sonuçtaki tüm sayılar toplanır.

  1. Girdi yaması ile filtrenin nokta çarpımını hesaplayın
    • Sol üst hücre: 2 × 1 = 2
  2. Sonucu toplayın
PyTorch ile Orta Düzey Deep Learning

Sıfır dolgusu (zero-padding)

Değeri sıfır olan piksellerden oluşan bir çerçeve ile çevrelenmiş 4x4 bir görüntü.

  • Evreşim katmanı girdisine sıfır dolgulu bir çerçeve ekleyin
nn.Conv2d(
  3, 32, kernel_size=3, padding=1
)
  • Girdi ve çıktı tensörlerinin uzamsal boyutlarını korur
  • Kenar piksellerinin diğerleriyle eşit işlenmesini sağlar
PyTorch ile Orta Düzey Deep Learning

Maksimum havuzlama (Max Pooling)

Her 2x2 çeyreği farklı renkle işaretlenmiş 4x4 bir matris, maksimum havuzlama sonrası 2x2 matrise dönüşür.

  • Girdi üzerinde çakışmayan bir pencere kaydırın
  • Her konumda yalnızca en büyük değeri tutun
  • Uzamsal boyutları azaltmak için evreşimden sonra kullanılır
  • nn.MaxPool2d(kernel_size=2)
PyTorch ile Orta Düzey Deep Learning

Evreşimsel Sinir Ağı

class Net(nn.Module):
    def __init__(self, num_classes):
        super().__init__()

self.feature_extractor = nn.Sequential( nn.Conv2d(3, 32, kernel_size=3, padding=1), nn.ELU(), nn.MaxPool2d(kernel_size=2), nn.Conv2d(32, 64, kernel_size=3, padding=1), nn.ELU(), nn.MaxPool2d(kernel_size=2), nn.Flatten(), )
self.classifier = nn.Linear(64*16*16, num_classes)
def forward(self, x): x = self.feature_extractor(x) x = self.classifier(x) return x
  • feature_extractor: (evreşim, aktivasyon, havuzlama) iki kez tekrarlanır ve düzleştirilir
  • classifier: tek doğrusal katman
  • forward(): girdi görüntüsünü önce özellik çıkarıcıdan, sonra sınıflandırıcıdan geçirir
PyTorch ile Orta Düzey Deep Learning

Özellik çıkarıcı çıktı boyutu

self.feature_extractor = nn.Sequential(
  nn.Conv2d(3, 32, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Conv2d(32, 64, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Flatten(),
)
self.classifier = nn.Linear(64*16*16, num_classes)
`

3x64x64 şeklindeki giriş görüntülerinin bir evreşim katmanı, bir havuzlama katmanı, bir başka evreşim katmanı ve bir başka havuzlama katmanından nasıl geçtiğini gösteren şema.

PyTorch ile Orta Düzey Deep Learning

Özellik çıkarıcı çıktı boyutu

self.feature_extractor = nn.Sequential(
  nn.Conv2d(3, 32, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Conv2d(32, 64, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Flatten(),
)
self.classifier = nn.Linear(64*16*16, num_classes)
`

3x64x64 şeklindeki giriş görüntülerinin bir evreşim katmanı, bir havuzlama katmanı, bir başka evreşim katmanı ve bir başka havuzlama katmanından nasıl geçtiğini gösteren şema.

PyTorch ile Orta Düzey Deep Learning

Özellik çıkarıcı çıktı boyutu

self.feature_extractor = nn.Sequential(
  nn.Conv2d(3, 32, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Conv2d(32, 64, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Flatten(),
)
self.classifier = nn.Linear(64*16*16, num_classes)
`

3x64x64 şeklindeki giriş görüntülerinin bir evreşim katmanı, bir havuzlama katmanı, bir başka evreşim katmanı ve bir başka havuzlama katmanından nasıl geçtiğini gösteren şema.

PyTorch ile Orta Düzey Deep Learning

Özellik çıkarıcı çıktı boyutu

self.feature_extractor = nn.Sequential(
  nn.Conv2d(3, 32, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Conv2d(32, 64, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Flatten(),
)
self.classifier = nn.Linear(64*16*16, num_classes)
`

3x64x64 şeklindeki giriş görüntülerinin bir evreşim katmanı, bir havuzlama katmanı, bir başka evreşim katmanı ve bir başka havuzlama katmanından nasıl geçtiğini gösteren şema.

PyTorch ile Orta Düzey Deep Learning

Özellik çıkarıcı çıktı boyutu

self.feature_extractor = nn.Sequential(
  nn.Conv2d(3, 32, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Conv2d(32, 64, kernel_size=3, padding=1),
  nn.ELU(),
  nn.MaxPool2d(kernel_size=2),
  nn.Flatten(),
)
self.classifier = nn.Linear(64*16*16, num_classes)
`

3x64x64 şeklindeki giriş görüntülerinin bir evreşim katmanı, bir havuzlama katmanı, bir başka evreşim katmanı ve bir başka havuzlama katmanından nasıl geçtiğini gösteren şema.

PyTorch ile Orta Düzey Deep Learning

Ayo berlatih!

PyTorch ile Orta Düzey Deep Learning

Preparing Video For Download...