Keras Model Wars: Functional vs Sequential

Fethi Tekyaygil
3 min readJan 30, 2022

--

Merhabalar,

Bu yazımda Keras’ta geliştirme yaparken karşımıza çıkan 2 model çeşidini açıklamaya çalışacağım.

Şimdiden keyifli okumalar 🙂

MODEL NEDİR?

Başarabilirsin: Makine Öğrenmesi’ne Giriş serimin ilk yazısındaki örneği ele alalım:

İki gün sonra üniversite sınavı olan bir lise öğrencisi düşünün. Bu öğrenci sınava hazırlanmak için çalışır ve deneme sınavları çözer. Üniversite sınavına girdiğinde ise deneme sınavlarındaki soruların aynısı değil, benzeri sorularla karşılaşır. Öğrenci deneme sınavlarını çözerek çalışmış ve üniversite sınavında deneme sınavlarındaki soru modeli üzerinden soruları cevaplandırabilmiştir.
Şimdi bu senaryoyu Makine Öğrenmesi tarafına çevirelim.
Makine Öğrenmesi problemlerini çözerken bir model (öğrenci) oluştururuz. Bu model bizim Makine Öğrenmesi algoritmamızın çalıştığı modeldir. Bu modeli önce bilgiyle besler, eğitir(öğrencinin sınava çalışması) ve sonrasında eğitilen bu modelin, daha önce vermediğimiz bilgilerle yeni bir sonuç tahmininde bulunmasını isteriz. (Öğrencinin daha önce sorularını görmediği bir sınava girmesi.)

Bu durumda modelimizi bilgileri öğrenen, öğrendiği bilgiler üzerinden belli verilerle tahminler gerçekleştiren bir yapı olarak görebiliriz.

Keras’ta Makine Öğrenmesi implemantasyonu yaptığımızda modelimizi iki şekilde oluşturabiliyoruz: Sequential ve Functional

LSTM için bu yazıyı okumanızı öneririm 🙂

Aşağıda basit bir model diyagramını görebilirsiniz:

i2tutorials.com sitesinden alınmıştır

Kısaca bahsetmek gerekirse:

  • Input Katmanı: Modelimizin girdi katmanıdır. Bu katmanda modelimize tahminin hangi bilgiler üzerinden yapılmasını istiyorsak o bilgileri yani özniteliklerimizi veriyoruz.
  • Hidden (Gizli) Katmanlar: Modelimizin input ve output katmanları arasındaki diğer katmanların hepsi hidden katmanlar olur.
  • Output Katmanı: Modelimizin çıktı katmanıdır. Bu katmandan label değerimiz çıkmaktadır.

Buraya kadar problem yok değil mi? Güzel.

SEQUENTIAL MODEL:

Bu model çeşidinde modelin implementasyonu basittir. Bir modelin basit olması için:

  • Birden farklı input kaynağının olmaması
  • Çoklu output hedeflerine sahip olmaması
  • Katmanları tekrar tekrar kullanmaması (reusability)

Gerekir. Buna göre bir modelin inputu tek bir yerden geliyorsa, outputu tek bir yere gidiyorsa, katmanlar başka modellerde kullanılmıyorsa o model basittir diyebiliriz.

Sequential Model’de önce modelimizi, sonra katmanlarımızı oluşturup modelimize ekliyoruz. Bir katmanın outputu kendisinden sonraki katmanın inputu oluyor. Hadi biraz ellerimizi kirletip işin mutfağına girelim 🙂

Burada dikkat etmeniz gereken noktalardan biri modelimizin add fonksiyonuyla katmanları ekleyişimiz. Katmanları dikkatli incelediğinizde ilk katmanın input_dim parametresi aldığını görüyoruz. Buradan da şunun anlayabiliriz: Sequential modeller tek input katmanına sahiptir ve bu katman her zaman ilk katmandır.

Dense ile ilgili daha fazla bilgiyi buradan, Activation ile ilgili daha fazla bilgiyi ise buradan edinebilirsiniz.

FUNCTIONAL MODEL:

Bu model çeşidi bize implementasyonda daha büyük esneklik sunmaktadır. Aynı katmanları paylaşan çoklu input ve output kaynaklarının var olmasına olanak sağlamaktadır. Bu implementasyonda önce katmanları oluşturur, birbirine bağlar, ondan sonra modelimizi oluştururuz.

SONUÇ:

Sequential Model bize basitlik sağlasada katman bazında esneklik sağlamaz. Modelimizi oluşturur ve katmanlarımızı sırasıyla ekleriz. Yalnızca tek bir input katmanı vardır.

Functional Model daha karmaşık ancak buna bağlı olarak daha esnektir. Önce katmanlarımızı oluşturur, gerekirse bunları birbirileri ile işleme sokar, sonrasında bir veya birden fazla input ve output katmanlarını kullanarak modelimizi oluştururuz.

KAPANIŞ:

Bu yazımda Sequential ve Functional modelleri anlatmaya çalıştım. Umarım açıklayıcı bir yazı olmuştur. Yazımın bu kısmına kadar gelebildiyseniz tebrikler ve teşekkürler 🙂 Sağlıklı, mutlu ve verimli zamanlar dilerim, Makine Öğrenmesi maratonundaki koşunuzda başarılar 🙂

--

--

Fethi Tekyaygil
Fethi Tekyaygil

Written by Fethi Tekyaygil

.NET Core Backend & Google Certified Tensorflow Developer — Flutter & Solidity Padawan — Animal Person

No responses yet