Derin Öğrenme (Deep Learning) - Keras Çekierdek Katmanı (Core Layer)

Flatten

Yayın tarihi :15-Şub-22

Flatten Layer (Düzleştirme Katmanı), verinin toplam boyutunu değiştirmeden çıktı boyutunu 1 boyutlu bir biçime dönüştürmek için kullanılan yapay sinir ağ katmanıdır.

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

from tensorflow.keras.layers import Flatten

Söz dizimi: Flatten(data_format=None, **kwargs)

  • 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.

Yukarıdaki parametre haricinde eğer modelde ilk katman olarak kullanılıyorsa input_shape adlı bir argümanı da kullanır. input_shape argümanı giriş katmanının boyutunu belirtmek için kullanılan, sayısal değer alan bir yapıdır.

Flatten katmanını daha iyi anlayabilmek için basit bir resim oluşturalım ve onu Flatten ile düzleştirelim.

#Gerekli kütüphaneler içe aktarılır.
import numpy
import matplotlib.pyplot as plt
%matplotlib inline
import tensorflow as tf

3x3 (3x3 piksel) boyutlarında resim oluşturmak için ilk olarak bir liste tanımlayalım ve bu resmi görüntüleyelim.

Not: Resim oluşturmak için; her sayı bir kareyi temsil etmektedir. 0-255 arasında istenilen sayı verilebilir. Resim kalitesinin yüksek olması için kare sayısının (piksel boyutunun) yüksek olması gerekmektedir. 

image=[[0,12,0],
       [0,0,0],
       [0,0,0]]
plt.imshow(image)

Çıktı:

Liste içerisinde 0 olan sayıları da farklı sayılarla doldurarak resmi tamamlayalım.

image=[[15,20,25],
       [30,35,40],
       [45,50,55]]

plt.imshow(image)

Çıktı:

Oluşturulan "image" listesini Tensorflow'a uygun olacak şekilde dönüştürme işlemi yapalım.

#Tensorflow'a uygun hale çevirme işlemi
image=tf.convert_to_tensor(image)

image

Çıktı:

 <tf.Tensor: shape=(3, 3), dtype=int32, numpy=
array([[15, 20, 25],
       [30, 35, 40],
       [45, 50, 55]])>
#Resmin boyutu
image.shape

Çıktı:

TensorShape([3, 3])

Mevcut resim için ön hazırlık olarak modeli oluşturalım ve modelin sonucunda ne olacağına bakalım;

#Model oluşturulur
model=Sequential()

#Modele giriş katmanı(input_shape ile) ve Flatten katmanı eklenir
model.add(Flatten(input_shape=(3,3))) #3,3 değeri resim 3x3 olduğu için verildi.
#Modelin özeti
model.summary()

Çıktı:

Model: "sequential_1"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten_1 (Flatten)         (None, 9)                 0         
                                                                 
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0

Katmanların görselleri incelenirse;

plot_model(model,show_shapes=True)

Çıktı:

Özet kısmında ve görselde de görüldüğü gibi Flatten katmanına girmeden 3x3 olan nesne boyutu 9 olarak çıkmış oldu. 

Yukarda oluşturulan 3x3'lük resim ilgili model tarafından tahmin edilmiş olsaydı sonucu ne olurdu diye bakalım;

Not: Bu kısımdan sonra yapılan tahminleme işlemi henüz anlatılmadı, sonraki derslerimizde anlatacağız ama Flatten katmanın işlevinin daha iyi görüntülenmesi için son durumdaki resim çıktısına dikkat ediniz.

#Oluşturulan modeli kullanma işlemi
result=model.predict(tf.expand_dims(image,[0]))
result

Çıktı:

array([[15., 20., 25., 30., 35., 40., 45., 50., 55.]], dtype=float32)

3x3 olan resim boyutu 9 elemanlı bir boyuta dönüştü.

Son durumda resim görüntüsü;

plt.imshow(result)

Çıktı:

Flatter katmanı sayesinde resimdeki tüm kareler tek satırda düzleştirilmiş oldu.

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.