Derin Öğrenme (Deep Learning) - Evrişim Katmanı (Convolution Layer)

Conv1D

Yayın tarihi :23-Şub-22
Bölüm kodlarını ve/veya veri setlerini indir.

Conv1D, bir çıktı tensörü üretmek için tek bir uzaysal veya zamansal boyut üzerinde katman girişiyle kıvrılan bir evrişim çekirdeği oluşturur. Evrişim sinir ağlarında(CNN) çekirdek bir yönde hareket eder. Conv1D'nin giriş ve çıkış verileri 2 boyutludur. Çoğunlukla Zaman Serisi verilerinde kullanılır. 

Örneğin bir koşma yapıldığında akıllı telefonlar veya bazı cihazlar tarafından kayderdilen verileri yorumlama işlemlerinde veya ses dalgalarını yorumlama işlemlerinde sıkça kullanılan bir katmandır. 

Conv1D Evrişim Katmanı nasıl çalışır?

Evrişim, girdi ile ağırlıkların çarpılmasını ve bir çıktı üretilmesini içeren doğrusal bir işlemdir. Çarpma, bir dizi girdi verisi ile çekirdek (veya filtre) adı verilen bir ağırlık dizisi arasında gerçekleştirilir. Girdi ve çekirdek arasında uygulanan işlem, eleman bazında bir nokta çarpımının toplamıdır. Her işlemin sonucu tek bir değerdir.

Aşağıdaki grafikte de gösterildiği üzere evrişim penceresinin uzunluğu(kernel_size), verinin genişliği boyunca tek eksen üzerinde kayarak ilerler, ilerleme adım sayısı(strides) Conv1D olduğu için tek boyutlu bir tam sayıdan oluşacaktır. Örnek olarak kernel_size değeri 4, yükseklik değeri 8 ve adım sayısı da 1 olsun. Evrişim işlemi sonucunda en fazla 5 adım atılabileceğinden dolayı yeni genişlik değerimiz 5 olacaktır.

Kullanılabilmesi için "Conv1D" kütüphanesinin içe aktarılması gerekmektedir.

from tensorflow.keras.layers import Conv1D

Söz dizimi: Conv1D(filters, kernel_size, strides=1, padding="valid", data_format="channels_last", dilation_rate=1, groups=1, activation=None, use_bias=True, kernel_initializer="glorot_uniform", bias_initializer="zeros", kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None, **kwargs)

  • filters, evrişimdeki çıktı filtrelerinin boyunu temsil eder, tam sayı değeri alır.
  • kernel_size, evrişim penceresinin uzunluğunu temsil eder, tam sayı değeri alır.
  • strides, evrişimin adım uzunluğunu temsil eder, tam sayı değeri alır. Varsayılan olarak 1 dir. 
  • padding, dolgu olup olmayacağını temsil eder. 3 farklı değer alır; "valid", "same" veya "causal" dır. Varsayılan olarak "valid" dir.
    • valid, dolgu olmadığını temsil eder.
    • same, çıktının girdi ile aynı yükseklik/genişlik boyutuna sahip olması için girdinin sağına/soluna veya yukarısınıa/aşağısına eşit olarak sıfır ekler.
    • causal, genişletilmiş evrişimler oluşturur.
  • data_format, bir veri formatından diğerine geçerken ağırlık sırasını korumak için esas olarak giriş boyutlarını sıralamak için kullanılır. İki farklı değer alabilir: "channels_last","channels_first". Varsayılan olarak "channels_last"dir.
  • dilation_rate, genişlemiş evrişim için kullanılacak genişleme oranını temsil eder.
  • gruplar, girişin kanal ekseni boyunca bölündüğü grupların sayısını temsil eder.
  • activation, kullanılacak aktivasyon fonksiyonunu temsil eder. Belirtilmezse herhangi bir aktivasyon uygulamaz.
  • use_bias, katmanın sapma vektörü kullanıp kullanmadığını temsil eder.
  • kernel_initializer, yapay sinir ağının bazı ağırlıklarla başlaması ve ardından bunları yinelemeli olarak daha iyi değerlerle güncellemesi gerekir. Kernel_initializer terimi, ağırlıkları başlatmak için kullanılacak istatistiksel dağılımdır. Varsayılan olarak "glorot_uniform" seçilidir. Daha fazla seçenek için Keras sayfası incelenebilir.
  • bias_initializer, bias(ön yargı) vektörü için kullanılacak başlatıcıyı temsil eder.
  • kernel_regularizer, kernel(çekirdek) ağırlıkları matrisine uygulanacak düzenleyici işlevi temsil eder.
  • bias_regularizer , bias vektörüne uygulanacak düzenleyici işlevi temsil eder.
  • activity_regularizer, katmanın çıktısına uygulanacak olan düzenleyici işlevini temsil eder.
  • kernel_constraint, çekirdek ağırlıkları matrisine uygulanacak kısıtlama işlevini temsil eder.
  • bias_constraint, bias vektörüne uygulanacak kısıtlama fonksiyonunu temsil eder.

Örnek-1: Bir model oluşturarak girdi katmanından sonra Conv1D katmanı ile evrişim işlemi uygulayalım.

from tensorflow.keras.layers import Dense,Conv1D
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import plot_model
#Model tanımlanır.
model=Sequential()

#Giriş katmanı("input_shape" ile) ve giriş katmanı sonrasında Conv1D katmanı modele eklenir.
model.add(Conv1D(filters=20,
                 kernel_size=3,
                 strides=1,
                 padding="same",
                 activation="relu",
                 input_shape=(8,32)))

#1.Gizli katman modele eklenir.
model.add(Dense(units=6,activation="relu"))

#Çıkış katmanı eklendi
model.add(Dense(units=1,activation="sigmoid"))

Oluşturulan modelin katmanları görselleştirilirse;

plot_model(model,show_shapes=True)

Çıktı:

Yukarıdaki grafikte de görüldüğü üzere giriş katmanında (8,32) olan boyut Conv1D işlemi sonrasında (8,20) olarak evrişme işlemi yapıldı.

Örnek-2: (1,1,1000) boyutlarında olan bir veriyi (bir sinyal verisi de denebilir) 2 defa Conv1D katmanından geçirip gözlemleyelim.

import tensorflow as tf
from tensorflow.keras.layers import Conv1D
#Boyut tanımlanır
input_shape = (1, 1, 1000)

#Random değerlerle tanımlanan boyut kadar bir liste oluşturulur
x=tf.random.normal(input_shape)
print("Girdi boyutu:",x.shape)

#1. Conv1D katmanı oluşturulur.
y=Conv1D(
    filters=600,       #çıktı filtrelerinin boyut değeri
    kernel_size=1,    #evrişim penceresinin uzunluğu
    strides=1,        #evrişimin adım uzunluğu
    padding="valid",  #dolgu durumu
    activation="relu",#activasyon fonksiyonu
    input_shape=input_shape[1:] #girdi boyutu (8,64)
)(x) #Conv1D katmanını x listesine uygula

#2. Conv1D katmanı oluşturulur.
y2=Conv1D(
    filters=300,       #çıktı filtrelerinin boyut değeri
    kernel_size=1,    #evrişim penceresinin uzunluğu
    strides=1,        #evrişimin adım uzunluğu
    padding="valid",  #dolgu durumu
    activation="relu" #activasyon fonksiyonu
)(y) #Conv1D katmanını x listesine uygula

print("1. Çıktı boyutu:",y.shape)
print("2. Çıktı boyutu:",y2.shape)

Çıktı:

Girdi boyutu: (1, 1, 1000)
1. Çıktı boyutu: (1, 1, 600)
2. Çıktı boyutu: (1, 1, 300)

Grafiksel olarak gözlemleyelim;

  • Hiçbir işlem yapılmadan verinin grafiği; 

  • 1. Conv1D işlemi sonrasında verinin grafiği; Activasyon fonksiyon değeri "relu" (sıfırdan küçük değerler 0, 0 dan büyük değerler de kendisi olarak alınır) seçildiğinden dolayı negatif değerlerde veriler bulunmamaktadır.

  • 2. Conv1D işlemi sonrasında verinin grafiği; 

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.