CodeBlanks Logo Icon CodeBlanks

CNN nedir?

CNN (Convolutional Neural Network), görüntü işlemede başarılı bir derin öğrenme modelidir.

CNN nedir?

Evrişimli sinir ağı (CNN), görüntü gibi ızgara yapılı verilerde küçük filtreleri tüm görüntü üzerinde kaydırarak yerel desenleri (kenar, köşe, doku) yakalar. Aynı filtre her konumda kullanıldığı için parametre sayısı küçük kalır ve bir desen görüntünün neresinde olursa olsun tanınır.

# 28x28 gri görüntü, tam bağlı ilk katman (128 nöron): 784 * 128 = 100352 ağırlık
# 3x3 evrişim, 16 filtre:                               3 * 3 * 16 = 144 ağırlık

Tipik bir CNN, evrişim + aktivasyon + havuzlama bloklarını üst üste koyar ve sonda tam bağlı bir sınıflandırıcı kullanır.

Evrişim işlemi

Bir filtre görüntünün küçük bir bölgesiyle eleman bazlı çarpılıp toplanır; sonuç çıktı haritasında tek bir değerdir. Filtre bir adım kaydırılır ve işlem tekrarlanır. Dikey kenar bulan bir filtre:

img = torch.tensor([[0., 0., 1., 1.],
                    [0., 0., 1., 1.],
                    [0., 0., 1., 1.]])
filtre = torch.tensor([[-1., 1.],
                       [-1., 1.]])
# sol üst 2x2 bölge: (0·-1 + 0·1 + 0·-1 + 0·1) = 0
# orta bölge:        (0·-1 + 1·1 + 0·-1 + 1·1) = 2  -> kenar

CNN'ler bu filtrelerin değerlerini veriden kendileri öğrenir.

Uygulama Elle evrişim

Verilen görüntüye filtre'yi elle uygula: her geçerli konumda (adım 1, dolgu yok) 2×2 bölgeyle eleman bazlı çarpımı topla ve sonucu 2×3'lük bir listeye yaz. Sonucu yazdır.

Başlangıç kodu

model.py
import torch
from torch import nn

img = torch.tensor([[0., 0., 1., 1.], [0., 0., 1., 1.], [0., 0., 1., 1.]])
filtre = torch.tensor([[-1., 1.], [-1., 1.]])

# buraya yaz

Örnek çözüm

model.py
import torch
from torch import nn

img = torch.tensor([[0., 0., 1., 1.], [0., 0., 1., 1.], [0., 0., 1., 1.]])
filtre = torch.tensor([[-1., 1.], [-1., 1.]])

sonuc = [[(img[i:i + 2, j:j + 2] * filtre).sum().item() for j in range(3)] for i in range(2)]
print(sonuc)

Beklenen çıktı

[[0.0, 2.0, 0.0], [0.0, 2.0, 0.0]]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 CNN'in görüntüde tam bağlı ağa göre temel avantajı nedir?

  • Ölçekleme gerektirmemesi
  • Ağırlık paylaşımı: az parametre ve konumdan bağımsız desen tanıma Doğru cevap
  • Daha çok parametre
  • Etiket gerektirmemesi

Açıklama: Aynı filtre tüm konumlarda kullanılır.

2 Bölge ile filtrenin eleman bazlı çarpımını topla.

Soru
deger = (bolge ____ filtre).sum()
Cevap
deger = (bolge * filtre).sum()

Açıklama: Evrişim bir bölgede eleman bazlı çarpım ve toplamdır.

3 Kavramları eşleştir.

Kavram Anlamı
filtre Öğrenilen küçük ağırlık matrisi
kaydırma Tüm konumlarda uygulama
ağırlık paylaşımı Az parametre
özellik haritası Filtrenin çıktısı

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