blog posts

Evrişimli Sinir Ağı (CNN) Nedir?

Makine öğrenimi projelerinde kullanılacak birçok farklı türde sinir ağı   vardır . Örneğin, tekrarlayan sinir ağları, ileri beslemeli sinir ağları, modüler sinir ağları vb. Evrişimli sinir ağı, yaygın sinir ağlarının türlerinden biridir   . Ancak evrişimli sinir ağlarının detaylarına girmeden önce normal sinir ağlarından biraz bahsetmek daha doğru olacaktır.

 

Sinir ağı nedir?

Makine öğrenmesinin bir alanı olan derin öğrenme denildiğinde muhtemelen sinir ağından bahsediyoruz.

Sinir ağları beynimize göre modellenmiştir. Ağda katmanlar oluşturan ve tıpkı beynimizdeki nöronlar gibi farklı alanları birbirine bağlayan düğümler vardır.

Bir katmandaki düğümlerin girişlerine, parametrenin genel tahmin sonucu üzerindeki etkisini değiştiren bir ağırlık atanır. Düğümler arasındaki bağlantılara ağırlıklar atandığından her düğüm farklı ağırlıklardan etkilenebilir.

Sinir ağı, giriş katmanındaki tüm eğitim verilerini alır. Daha sonra verileri gizli katmanlardan geçirir, her düğümün ağırlığına göre değerleri değiştirir ve son olarak çıktı katmanında bir değer döndürür.

Birden fazla gizli katmana sahip sinir ağı. Her katmanın birden fazla düğümü vardır.

Tutarlı ve güvenilir sonuçlar elde etmek için bir sinir ağını doğru şekilde ayarlamak biraz zaman alabilir. Bir sinir ağının test edilmesi ve eğitilmesi, modelin en önemli özelliklerinin belirlenmesine yönelik bir dengeleme sürecidir.

 

Evrişimli sinir ağı (CNN) nasıl farklı çalışır?

Evrişimli bir sinir ağı, bir ızgara düzenine sahip verileri işleyen ve daha sonra onlardan önemli özellikleri çıkaran, çok katmanlı özel bir sinir ağı türüdür. CNN kullanmanın büyük bir avantajı, görüntüler üzerinde çok fazla ön işleme yapılmasına gerek olmamasıdır.

Görüntü işlemeyi gerçekleştiren algoritmaların çoğunda, filtreler genellikle bir mühendis tarafından sezgisel yöntemlere dayalı olarak oluşturulur. CNN’ler filtrelerin en önemli özelliklerini öğrenebilir ve birçok parametreye ihtiyaç duyulmadığından çok fazla zaman ve deneme yanılma işleminden tasarruf sağlar.

Binlerce piksele sahip yüksek çözünürlüklü görüntülerle çalışmadığınız sürece bu tasarruf pek fark edilmez. CNN algoritmasının temel amacı, verinin neyi temsil ettiğini anlamak için önemli olan özellikleri korurken, veriyi işlenmesi daha kolay formlara indirgemektir. Ayrıca büyük veri kümeleriyle çalışmak için de iyi bir seçenektir.

Bir CNN ile normal bir sinir ağı arasındaki büyük fark, CNN’lerin perde arkasındaki matematiği ele almak için evrişimi kullanmasıdır. CNN’in en azından bir katmanında matris çarpımı yerine evrişim kullanılır. Evrişimler en fazla iki işlevi alır ve bir işlev döndürür.

CNN’ler giriş verilerinize filtreler uygulayarak çalışır. Onları bu kadar özel kılan ise CNN’lerin eğitim süreciyle aynı anda filtreleri ayarlayabilmesidir. Bu sayede görseller gibi çok büyük bir veri setiniz olsa bile sonuçlar anında daha doğru ve doğru olacaktır.

Filtreler CNN’yi daha iyi eğitmek için güncellenebildiğinden, manuel filtrelere olan ihtiyaç ortadan kalkar ve bu bize veri kümesine uygulanan filtrelerin sayısı ve alaka düzeyi konusunda daha fazla esneklik sağlar. Bu algoritmayı kullanarak yüz tanıma gibi daha karmaşık problemler üzerinde çalışabiliyoruz.

Veri eksikliği CNN’in kullanımını engelleyen sorunlardan biridir. Ağlar nispeten az miktarda veriyle (yaklaşık 10.000) eğitilebilse de, ne kadar çok veri mevcutsa CNN o kadar iyi ayarlanır.

CNN’in kullanabilmesi için bu verilerin temiz ve etiketli olması gerektiğini unutmayın; bu da verilerle çalışmayı zaman alıcı ve hesaplama açısından zorlu hale getirir.

 

Evrişimli sinir ağı nasıl çalışır?

Evrişim sinir ağları sinirbilimin bulgularına dayanarak çalışır. Düğüm adı verilen yapay nöron katmanlarından oluşurlar. Bu düğümler, girdilerin ağırlıklı toplamını hesaplayan ve bir aktivasyon haritası döndüren işlevlerdir. Bu sinir ağının evrişimli kısmıdır.

 

 

Katmandaki her düğüm, ağırlık değerlerine göre tanımlanır. Bir katman verisini (örneğin görüntü) beslediğinizde piksel değerlerini alır ve bazı görsel özellikleri çıkarır.

CNN’e veri gönderdiğinizde her katman aktivasyon haritalarını döndürür. Bu eşlemeler veri kümesinin önemli özelliklerini tanımlar. CNN’e bir görsel verirseniz, renkler gibi piksel değerlerine dayalı özellikleri tespit edecek ve size bir aktivasyon fonksiyonu sağlayacaktır.

Genellikle görüntülerde CNN ilk olarak görüntünün kenarlarını bulur. Görüntünün bu kısmi tanımı daha sonra bir sonraki katmana aktarılır ve bu katman, köşeler ve renk grupları gibi şeyleri tanımlamaya başlar. Görüntünün bu yeni tanımı daha sonra bir sonraki katmana aktarılır ve döngü tahmin edilene kadar devam eder.

Aşağıdaki görselde görüldüğü gibi katman sayısı arttırılarak maksimum havuzlama yapılmalıdır. Maksimum Toplama, etkinleştirme haritasındaki katmandan yalnızca en alakalı özellikleri döndürür ve bunları son katmana ulaşıncaya kadar sonraki katmanlara aktarır.

CNN’in son katmanı, aktivasyon haritasına göre tahmin edilen değeri belirleyen sınıflandırma katmanıdır. CNN’e bir el yazısı örneği verirseniz, sınıflandırma katmanı size görüntüdeki harfleri söyleyecektir. Bu, sürücüsüz araçların bir nesnenin araba mı, insan mı yoksa engel mi olduğunu belirlemek için kullandığı yöntemdir.

 

 

CNN eğitimi, diğer birçok makine öğrenimi algoritmasının eğitimine benzer. Test verilerinizden farklı olan eğitim verileriyle, önyükleme ve ağırlıkları, tahmin edilen değerlerin doğruluğuna göre ayarlayacaksınız. Sadece modeli fazla takmamaya dikkat edin .

 

Evrişimli sinir ağının kullanım durumları

Sorununuza bağlı olarak kullanabileceğiniz farklı CNN türleri vardır.

Evrişimli sinir ağı (CNN) türleri.

Tek boyutlu CNN:  Bu durumda CNN çekirdeği tek yönde hareket eder. Tek boyutlu CNN’ler zaman serisi verilerinde yaygın olarak kullanılır.

İki boyutlu CNN:  Bu CNN türünde çekirdekler iki yönde hareket eder. Görüntü etiketleme ve işlemede iki boyutlu CNN’ler kullanılır.

3D CNN:  Bu tip CNN, üç yönde hareket eden bir çekirdeğe sahiptir. Araştırmacılar bu tür CNN’yi CT taraması ve MRI gibi 3 boyutlu görüntülerde kullanıyor.

Sorunların çoğu görüntü verileriyle ilgili olduğundan sıklıkla 2D CNN’ler kullanılır. Aşağıda CNN’lerin olası uygulamalarından bazıları verilmiştir.

  • Çok az ön işleme ile görüntü tanıma
  • Farklı el yazılarının tanınması
  • Bilgisayarlı görme uygulamaları (Bilgisayarlı Görme)
  • Bankacılıkta çek üzerindeki rakamları okumak için kullanılır
  • Zarfın üzerindeki posta kodunu okumak için posta hizmetlerinde kullanılır

 

Python’da CNN örneği

CNN’i gerçek bir problemde kullanmanın bir örneği olarak, MNIST veri kümesini kullanarak el yazısıyla yazılan sayıları tanıyalım.

Yapmamız gereken ilk şey CNN modelini tanımlamaktır. Daha sonra eğitim ve test verilerini ayırıyoruz ve son olarak modeli eğitmek için eğitim verilerini ve onu test etmek için test verilerini kullanıyoruz.

from keras import layers
from keras import models
from keras.datasets import mnist
from keras.utils import to_categorical

# Define the CNN model
model = models.Sequential()

model.add(layers.Conv2D(32, (5,5), activation='relu', input_shape=(28, 28,1)))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (5, 5), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Flatten())
model.add(layers.Dense(10, activation='softmax'))

model.summary()

# Split the data into training and test sets
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255

test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

# Use the training data to train the model
model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

model.fit(train_images, train_labels,
          batch_size=100,
          epochs=5,
          verbose=1)

# Test the model's accuracy with the test data
test_loss, test_acc = model.evaluate(test_images, test_labels)

print('Test accuracy:', test_acc)

Çözüm

Evrişimli sinir ağları, veri özelliklerini yakalama konusunda yetenekli çok katmanlı sinir ağlarıdır. Görüntülerle iyi çalışırlar ve fazla ön işleme gerektirmezler.

Görüntüyü ana özelliklerine indirgemek için evrişim ve havuzlamayı kullanarak görüntüleri doğru şekilde tanımlayabilirsiniz.

CNN modellerinin eğitimi, daha az başlangıç ​​parametresi ile diğer sinir ağlarına göre daha kolaydır. Evrişimler sizin için birçok gizli katmanı keşfedebildiğinden, çok fazla gizli katmana ihtiyacınız olmayacak.

CNN’lerle ilgili ilginç şeylerden biri, üzerinde kullanılabilecekleri karmaşık problemlerin sayısıdır. Sürücüsüz arabalardan diyabet teşhisine kadar CNN’ler verileri işleyebilir ve doğru tahminler yapabilir.