Derin Öğrenme (Deep Learning) - Havuzlama Katmanları (Pooling Layers)
MaxPooling1D
MaxPooling1D, 1 boyutlu zamansal veriler için maksimum havuzlama işlemidir.
Maksimum Havuzlama işlemi nedir?
Genellille Conv1D evrişim katmanından sonra oluşan 2 boyutlu tensörlerden (giriş boyutu x giriş kanalları) giriş boyutu değerlerinden maksimum değerin seçilmesi anlamına gelmektedir.
Kullanılabilmesi için "MaxPooling1D" kütüphanesinin içe aktarılması gerekmektedir.
from tensorflow.keras.layers import MaxPooling1D
Söz dizimi: MaxPooling1D(pool_size=2, strides=None, padding="valid", data_format="channels_last", **kwargs)
- pool_size, maksimum havuzlama penceresinin boyutunu temsil eder. Tam sayı değeri alır.
- strides, havuzlama penceresinin ne kadar adımda hareket ettiğini temsil eder, tam sayı değeri alır.
- padding, dolgu olup olmayacağını temsil eder. 2 farklı değer alır; "valid", "same" 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.
- 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.
Örnek-1: Bir model oluşturarak Conv1D katmanından sonra MaxPooling1D ile maksiumum havuzlama işlemi uygulayalım.
import tensorflow as tf
from tensorflow.keras.layers import Dense,Conv1D,MaxPooling1D
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)))
model.add(MaxPooling1D(pool_size=2,
padding="same"))
#1.Gizli katman modele eklenir.
model.add(Dense(units=6,activation="relu"))
#Çıkış katmanı eklendi
model.add(Dense(units=1,activation="sigmoid"))
Modelin grafiğini inceleyelim;
plot_model(model,show_shapes=True)
Çıktı:
Yukarıdaki grafikden de görüldüğü üzere MaxPooling1D katmanında 8 olan girdi boyutu katmanın pool_size değeri(havuzlama penceresi boyutu) 2 olduğu için 2 alanın en büyük değerini alacak ve çıktı boyutu 4 olarak sonuçlanacaktır.
Örnek-2: Bir liste elemanlarına MaxPooling1D ile maksiumum havuzlama işlemi uygulayalım ve sonuçları gözlemleyelim.
import tensorflow as tf
from tensorflow.keras.layers import MaxPooling1D
#Liste tanımlanır ve 1x8x1 boyutlandırma işlemi yapılır
x=tf.convert_to_tensor([1,2,3,4,5,6,7,8])
input_=tf.reshape(x,[1,8,1])
print("Girdi boyutu:",input_.shape)
print("Girdi:",input_)
print("######################")
#MaxPooling1D tanımlanır
output_=MaxPooling1D(pool_size=2,strides=2)(input_)
print("Çıktı boyutu:",output_.shape)
print("Çıktı:",output_)
Çıktı:
Girdi boyutu: (1, 8, 1) Girdi: tf.Tensor( [[[1] [2] [3] [4] [5] [6] [7] [8]]], shape=(1, 8, 1), dtype=int32) ###################### Çıktı boyutu: (1, 4, 1) Çıktı: tf.Tensor( [[[2] [4] [6] [8]]], shape=(1, 4, 1), dtype=int32)
Sonuç değerleri incelendiğinde MaxPooling1D katmanında 8 olan girdi boyutu katmanın pool_size değeri(havuzlama penceresi boyutu) 2 olduğu için 2'li olarak değerleri gruplandırarak en büyük değerleri döndürdü.
- [1,2] - 2
- [3,4] - 4
- [5-6] - 6
- [7-8] - 8 değerlerini döndürmüş oldu.