Keras ile Derin Öğrenme yazı serisinde sizle Keras Framework’ü kullanarak nasıl öngörüler yapılır ingilizce kaynaklardan ve kendi çalışmalarımdan yola çıkarak anlatmaya çalışacağım. Sorularınızı ve gördüğünüz hatalarımı e-mail olarak gönderebilirsiniz.

Bu seride sizlere farklı yöntemlerle Keras üzerinden zaman serisi tahmini nasıl yapılır açıklayacağım.

Tek Değişkenli Zaman Serisi Tahmini

  • Amacımız tek değişkenli bir dizinin yeni elemanını tahmin edebilecek bir derin öğrenme modeli oluşturmak. En basit şekilde 1’den 9’a kadar olan sayıları verip modelimizden bu diziye bakarak bu dizinin sonraki değeri yani 10 sayısını tahmin etmesini istiyoruz. Bu amaca ulaşmak için iki büyük ana başlık altında tahmin yapmaya çalışacağız.
    – Veri Hazırlanması
    -Sinir Ağının Modellenmesi

Verilerin Hazırlanması
Tek değişkenli serimiz modellemesini yapmadan önce verilerimizi kullanacağımız modele uygun şekilde hazırlamamız gerekiyor. Örneğin Özyinelenen Sinir Ağları(RNN — Recurrent Neural Network) modelini kullanmak istiyorsak verilerimizin şeklini 3 boyutlu hale getirmemiz gerekirken, birazdan kullanacağımız Çok Katmanlı Algılayıcı(Multi-Layer Perceptron MLP) modelinde verimizin şeklini değiştirmemiz gerekmeyecek.
Tek Değişkenli Serimiz şu şekilde olsun :

  • Öncelikle dizimizdeki verileri modelimizin öğrenebileceği örneklere dönüştürmemiz gerekiyor. Üç zaman dilimine ait sıralı verimizi girdilerimiz olarak alalım ve bir sonraki zaman dilimine ait verimizi de çıktımız olarak alalım.

  • Aşağıda göreceğiniz fonkisyonun görevi bu işlevi yapmak.

Verimizi uygulayacağımız derin öğrenme modeli için nasıl hazırlayacağımızı biliyoruz(Daha kompleks verileri nasıl hazırlayacağımızı diğer örneklerde göreceğiz.). Şimdi nasıl MLP modeli geliştireceğimizi inceleyelim.

MLP Model

Basit bir MLP modelinde tahmin yapabilmek için tek bir gizli katman ve çıkış katmanı kullanılır.Tek değişkenli bir MLP modelini şu şekilde tanımlayabiliriz.

İlk olarak Keras modelleri üzerinden import ettiğimiz Sequential modelini tanımlayarak başlıyoruz.

İkinci kod satırında tek olan gizli katmanın nasıl tanımlandığını görüyorusunuz. İlk girdiğimiz sayısal veri, katmanımızda kaç tane sinir(neuron) kullanacağımızı gösteriyor. Burda önemli olan konu girdilerin şekli. Aslında bu kısımda giriş katmanınızı tanımlıyorsunuz. Yani modelin verilerinizi nasıl alması gerektiğini belirtiyorsunuz. Bunu aynı zaman da girdilerimizin boyutunu vermek yerine girdilerimizin şeklini belirterek de yapabiliriz.

Gördüğünüz “dense” ise katmanımızın türünü belirtiyor. Daha gelişmiş modeller tasarlarken daha farklı katman türlerini de ilerde kullanacağız.

Activation kısmında ise her katmanımız için aktivasyon fonksiyonu kullanabiliriz. Birçok aktivasyon fonksiyonu bulunmakta ve verimize göre en iyi fonksiyonu seçmeliyiz.

Ayrıca verisetimize göre modelimizdeki gizli katman sayısını arttırabilir veya kullandığımız sinir(neuron) sayısında değişiklik yaparak daha iyi sonuçlar elde edebiliriz. Gelecek gönderilerimde bunu daha farklı inceleyebiliriz.

Modelimize katmanları ekledikten sonra modelimizi derlememiz gerekli. Bu kısımda compile() fonksiyonunu kullanmamız gerekiyor.
Kayıp(loss) fonksiyonunu problemimize göre belirlememiz gerekiyor. Biz bu örnekte “mae” yani “mean absolute error” fonksiyonunu kullandık. Bu fonksiyon sayesinde gerçek değerlerle tahmin ettiğimiz değer arasındaki ortalama farkı görüyoruz. Kayıp fonksiyonumuzun sonucu sıfıra ne kadar yakınsa o kadar iyi.

Modelimizi derledikten sonra oturtma işlemi geliyor. Ayrıştırma fonksiyonu ile elde ettiğimiz iki veri setini modelimizi oturtmakta kullanacağız. Peki modeli oturtmak ne demektir ?

Bunun anlamı modelimizi eğitmek anlamına geliyor. Ancak modelimizi eğitmek için birçok parametre bulunuyor. Bunların bir kısmını sizlere göstereceğim.

Validation split özelliği ile verdiğimiz girdilerin ve hedefteki verilerin belirli bir yüzdeyle ayrıştırılıp test edilmesi sağlanarak modelimizin ne kadar başarılı olduğunu inceleyebiliriz.

Epochs özelliği ile verdiğimiz verilerin kaç defa sinir ağımızdan geçmesi gerektiğini belirtiyoruz.

Batch Size özelliğini de birçok örnekte görebilirsiniz. Bu özellikle sinir ağınıza her girdiğinizde ne kadar büyüklükte örnek verdiğinizi belirtirtebilirsiniz. Eğer modelinizi oturturken bunu belirtmezseniz otomatik olarak bu değer 32 olarak alınacaktır.

Verbose özelliği bize sadece eğitim sırasında her bir epochdan sonra elde edilen sonuçların gösterilmesini sağlıyor. Sıfır olarak girerseniz bunları inceleyemezsiniz. Bu yüzden siz denerken bu değeri bir olarak girerek sonuçları incelemenizi öneririm.

Not: Diğer parametreler hakkında bilgi almanız için gönderinin sonunda Keras’ın kendi sayfasından incelemenizi önerdiğim linki ekledim.

Modelimizi oturttuktan sonra artık serimizin yeni değerini girdiler vererek tahmin edebiliriz. “7, 8, 9” sayılarını vererek modelimizden 10 sayısını tahmin etmesini bekliyoruz. Modelimiz girdi olarak iki boyutlu [örnekler, özellikler] beklemektedir. Bu yüzden tahmin yapmadan önce listemizi yeniden şekillendirmemiz gerekiyor.

  • Yeniden şekillendirme yapmadan önce girdimizin şekli (3,) iken girdimizi (1,3) haline getirdik. Yani [bir örnek, üç zaman dilimi].

Çıktılarımıza baktığımızda, önce verimizi modelimize uygun hale getirdik, daha sonra modelimizi oluşturup eğittik ve tahmin yaptık. Eğitim sırasındaki değerleri görmememizin sebebi modelimizi oturturken verbose değerini sıfır olarak girmemizden kaynaklanıyor.

10 sayısını tahmin etmeye çalıştık ve çok yakın bir değer elde ettik.

Kodun tamamını da aşağıda inceleyebilirsiniz.

– Size basit bir veri üstünden Keras kullanılarak nasıl tek değişkenli sıralı zaman dizisinde tahmin yapılır gösterdim. Burdaki her bir satır kod için belki de verinize göre büyük araştırma yapmanız gerekecek. Yapay sinir ağlarının gerisinde neler olduğuna dair, her bir kodun ve parametrenin önemi ve buna benzer konularla ilgili de ilerde paylaşım yapmaya çalışacağım.

Kaynaklar:

  1. https://machinelearningmastery.com/tutorial-first-neural-network-python-keras/

(Bu sitede derin öğrenmeyle ilgili birçok örnek bulabilirsiniz.)

2)https://github.com/deeplearningturkiye/turkce-yapay-zeka-terimleri

(Deep Learning Türkiye sayfasının hazırlamış olduğu yapay zeka terimleri çevirisini burdan inceleyebilirsiz.)

3)https://keras.io/models/model/

(Kerasın kendi sitesinden de tüm model ve parametreler ile ilgili bilgi edinebilirsiniz.)