Derin Öğrenme (Deep Learning) - Havuzlama Katmanları (Pooling Layers)
AveragePooling3D
AveragePooling3D, 3 boyutlu veriler için ortalama havuzlama işlemidir.
Genellille Conv3D evrişim katmanından sonra oluşan tensörlerden (giriş boyutu x giriş yüksekliği x giriş kanalları) giriş boyutu ve giriş yüksekliği değerlerinden ortalama değerin seçilmesi anlamına gelmektedir.

Kullanılabilmesi için "AveragePooling3D" kütüphanesinin içe aktarılması gerekmektedir.
from tensorflow.keras.layers import AveragePooling3D
Söz dizimi: AveragePooling3D(pool_size=(2,2,2), strides=None, padding="valid", data_format="channels_last", **kwargs)
- pool_size, ortalama 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. (Örn:(1,1,1))
- 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 Conv3D katmanından sonra AveragePooling3D ile ortlama havuzlama işlemi uygulayalım.
from tensorflow.keras.layers import Dense,Conv3D,AveragePooling3D
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 Conv3D katmanı modele eklenir.
model.add(Conv3D(filters=20,
kernel_size=(3,3,3),
strides=(1,1,1),
padding="same",
activation="relu",
input_shape=(28, 28, 28, 1)))
#AveragePooling3D katmanı eklenir
model.add(AveragePooling3D())
#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 AveragePooling3D katmanında (28,28,28,20) olan girdi boyutu katmanın pool_size değeri(havuzlama penceresi boyutu) (2,2,2) olduğu için bu alanların ortalama değerini alacak ve çıktı boyutu (14,14,14,20) olarak sonuçlanacaktır.
Örnek-2: Bir liste elemanlarına AveragePooling3D ile ortalama havuzlama işlemi uygulayalım ve sonuçları gözlemleyelim.
import tensorflow as tf
from tensorflow.keras.layers import AveragePooling3D
import numpy as np
#Liste tanımlanır
myList=np.random.randint(1,20,(1,4,4,4,1)).astype("float")
input_=tf.convert_to_tensor(myList)
print("Girdi boyutu:",input_.shape)
print("Girdi:",input_)
print("######################")
#AveragePooling3D tanımlanır
output_=AveragePooling3D(pool_size=(2,2,2))(input_)
print("Çıktı boyutu:",output_.shape)
print("Çıktı:",output_)
Çıktı:
Girdi boyutu: (1, 4, 4, 4, 1)
Girdi: tf.Tensor(
[[[[[11.]
[13.]
[17.]
[ 3.]]
[[15.]
[19.]
[13.]
[12.]]
[[17.]
[19.]
[13.]
[17.]]
[[13.]
[ 9.]
[16.]
[ 4.]]]
[[[ 8.]
[17.]
[10.]
[13.]]
[[ 2.]
[11.]
[12.]
[19.]]
[[13.]
[ 7.]
[ 7.]
[ 9.]]
[[15.]
[18.]
[11.]
[15.]]]
[[[16.]
[18.]
[ 5.]
[ 5.]]
[[ 5.]
[ 2.]
[ 9.]
[15.]]
[[ 1.]
[ 5.]
[ 2.]
[12.]]
[[15.]
[10.]
[13.]
[ 5.]]]
[[[10.]
[ 7.]
[18.]
[ 4.]]
[[ 1.]
[ 3.]
[13.]
[11.]]
[[ 5.]
[ 3.]
[10.]
[ 6.]]
[[ 6.]
[ 2.]
[14.]
[ 2.]]]]], shape=(1, 4, 4, 4, 1), dtype=float64)
######################
Çıktı boyutu: (1, 2, 2, 2, 1)
Çıktı: tf.Tensor(
[[[[[12. ]
[12.375]]
[[13.875]
[11.5 ]]]
[[[ 7.75 ]
[10. ]]
[[ 5.875]
[ 8. ]]]]], shape=(1, 2, 2, 2, 1), dtype=float32)
