Derin Öğrenme (Deep Learning) - Keras Modelleri

Functional API Model (İşlevsel API Modeli)

Yayın tarihi :16-Şub-22

 Yapay sinir ağları temelde bir giriş katmanı, gizli katman(lar) ve bir çıkış katmanından oluşur. Her katmanda belirli sayıda düğüm (nöron)'dan oluşur. Keras ile yapay sinir ağlarını oluştumak için iki yol mevcuttur. Bunlardan ikincisi ve kullanımı Sequential API'ye göre daha zor olan "Functional API"dir.

Oluşturulmak istenen modeller daha esnek yapıdadır. Birden çok girdi veya çıktıya sahip yapıları işleyebilir. 

Kullanabilmek için "Model" kütüphanesinin içe aktarılması gerekmektedir.

from tensorflow.keras.models import Model

Söz dizimi: Model(*args, **kwargs)

  • *args: inputs, modelin girdilerini temsil eder.
  • *args: outputs, modelin çıktılarını temsil eder.

Oluşturulacak modele önceden oluşturulan istenilen sayıda katman eklenebilir. Katman sayısının çok olması elde edilecek hedef(tahmin) sonucunun daha iyi olacağı anlamına gelmemektedir. Hatta bazı durumlarda başarı yüzdesinin düştüğü de gözlemlenebilir. Katman sayısının çok olmasının diğer dezavantajı modeli eğitmek için yüksek performans gerektirecek bilgisayarlara ihtiyacın artması olacaktır.

Eklenen katmanda ne kadar düğüm(nöron) olacağı konusunda net bir durum bulunmamaktadır Sıkça kullanılan 2 yöntem uygulanabilir;

  • (önceki katmandaki düğüm sayısı + sonraki katmandaki düğüm sayısı)/2 
  • √(önceki katmandaki düğüm sayısı + sonraki katmandaki düğüm sayısı)  

Eklenen katmanların sıralı olması gerekmemektedir. Örnek olarak 3 gizli katmanı bulunan bir modelde, 1. katman doğrudan çıkış katmanına bağlı olabilir. Aşağıdaki örneğimizde durumu net olarak anlayacaksınız.

Grafik üzerinden Functional API modeli inceleyelim; Modelimizde;

  • Giriş değişken sayısı:10
  • 1. Gizli layer nöron sayısı:64
  • 2. Gizli layer nöron sayısı:32
  • 3. Gizli layer nöron sayısı:16
  • Birleştirme Katmanı
  • Çıkış değişken sayısı:1

"Functional API" modeli için Model kütüphanesini, Giriş katmanı için "Input" kütüphanesini, eklenecek katmanın özelliklerini belirtmek için "Dense" kütüphanesini, katmanlarda birleştirme yapmak için "Concatenate" kütüphanesini ve modeli görselleştirmek için de Keras araçlarından plot_model'i içe aktarılır. 

#Gerekli kütüphaneler
from tensorflow.keras import Sequential,Model
from tensorflow.keras.layers import Dense,Input,Concatenate
from tensorflow.keras.utils import plot_model

Daha sonraki aşamalar;

  • Giriş katmanı tanımlanır.
  • 1. gizli katman oluşturuldu ve giriş katmanı ile bağlandı.
  • 2. gizli katman oluşturuldu ve 1. gizli katmanla bağlandı.
  • 3. gizli katman oluşturuldu ve 2. gizli katmanla bağlandı.
  • Birleştirme katmanı eklenerek giriş katmanı ile 3. gizli katman birbirlerine bağlandı.
  • Çıkış katmanı birleştirilen katmanla bağlandı.
  • Functional API tanımlaması yapılarak model sonlandırıldı.
#Giriş katmanı
input_ = Input(shape=(10,),name="Giris_Katmani")

#1.Gizli Katman
hidden1 = Dense(64,name="Gizli_Katman_1")(input_)

#2.Gizli Katman
hidden2 = Dense(32,name="Gizli_Katman_2")(hidden1)

#3.Gizli Katman
hidden3 = Dense(16,name="Gizli_Katman_3")(hidden2)

#Birleştirme Katmanı
concat_ = Concatenate(name="Birlestirme_Katmani")([input_, hidden3])

#Çıkış Katmanı
output = Dense(1,name="Cikis_Katmani")(concat_)

#Functional API tanımlanması
model = Model(inputs=[input_], outputs=[output] )

Model oluşturuldu ve giriş katmanı, gizli katmanlar ve çıkış katmanı tanımlandı. Modelde bulunan her katmanının adı, katmanların çıktı şekilleri ve her katmandaki parametre sayısı dahil olmak üzere tüm model özellikleri görüntüleyebilmek için summary() komutu kullanılır.

#Modelin özet bilgileri
model.summary()

Çıktı:

Model: "model_2"
__________________________________________________________________________________________________
 Layer (type)                   Output Shape         Param #     Connected to                     
==================================================================================================
 Giris_Katmani (InputLayer)     [(None, 10)]         0           []                               
                                                                                                  
 Gizli_Katman_1 (Dense)         (None, 64)           704         ['Giris_Katmani[0][0]']          
                                                                                                  
 Gizli_Katman_2 (Dense)         (None, 32)           2080        ['Gizli_Katman_1[0][0]']         
                                                                                                  
 Gizli_Katman_3 (Dense)         (None, 16)           528         ['Gizli_Katman_2[0][0]']         
                                                                                                  
 Birlestirme_Katmani (Concatena  (None, 26)          0           ['Giris_Katmani[0][0]',          
 te)                                                              'Gizli_Katman_3[0][0]']         
                                                                                                  
 Cikis_Katmani (Dense)          (None, 1)            27          ['Birlestirme_Katmani[0][0]']    
                                                                                                  
==================================================================================================
Total params: 3,339
Trainable params: 3,339
Non-trainable params: 0
plot_model(model,show_shapes=True)

Çıktı:

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.