JavaScript ile Makine Öğrenmesi ve TensorFlow

460

TensorFlow ile muhteşem işler yapabiliyoruz. Yüz tanıma, yüz ifadesinden duygu tespiti, nesne tanıma bunlardan bir kaçı. Fakat şu ana kadar ki ana odak araştırm idi. Jupytper notebook kullanarak bir sinir ağı modeli basit ve hızlıca prototipleyebiliyorduk. Öte yandan, prototiplerin üretim ortamına taşınması da önemli bir konu. Bu noktada TensorFlow.js’i canlı’da kolayca kullanabiliyoruz. Böylelikle TensorFlow kodunu geleneksel javascript ile istemci tarafında (client side) yada Node.js ile sunucu tarafında (server side) çalıştırabiliyoruz. Dahası, önceden TensorFlow ile eğitilmiş sinir ağı ağırlıklarını Java programlama dilinde tüketebiliyorduk ama eğitim kısmı by-pass geçilmişti. Artık TensorFlow.js ile eğitim kısmının da kapsandığı doğrudan canlıya dokunabileceğimiz çalışmalar gerçekleştirebiliyoruz.

İstemci tarafı

Bu senaryoda kodu doğrudan çalıştırabiliyoruz. Öncesinde yapmamız gereken bir kurulum ihticacı bulunmuyor. Doğrudan merhaba.html adında bir dosya oluşturuyorum ve dosya içeriğini not defterinde düzenlemeye başlıyorum. Başlık etiketinde TensorFlow.js kütüphanesini referans gösterdikten sonra TensorFlow ile ilişkili nesnelere tf değişkeni altından erişebileceğim. Resmi sitesinden kontrol etmenizde fayda var, benim kullandığım versiyondan daha güncel bir versiyon yayınlanmış olabilir.

Kütüphaneyi referans gösterdikten sonra ikinci bir script etiketi tanımlamamız gerekiyor. Geliştirmelerimizin asıl gövdesi burada yer almalı.

Problem

XOR lojik kapısı için bir model üzerinde çalışacağız. Veri setini kod içerisinde statik olarak yaratarak başlayalım. x değişkeni lojik kapının alabileceği tüm olası değer kümesi çiftlerini tutarken, y değişkeninde de x değişkenine karşılık gelen XOR çıktısı one-hot encoded (0 indisli değer 1 ise sonuç 0, 1 indisli değer 1 ise sonuç 1. aynı anda ya 0. ya da 1. indisli değer 1 olabilir) şekilde yer alacak.

Sinir ağı modeli

Yapay sinir ağının girdi katmanına XOR kapısının girdilerini doğrudan aktaracağımız için 2 düğümden oluşacak. İlk ve tek gizli katmanımızda 5 düğümün olması uygun olacaktır. Bu katman için de aktivasyon fonksiyonunu sigmoid fonksiyonu olarak seçiyorum. Çıktı katmanında da 2 düğüm yer alacak çünkü y değişkenini one-hot-encoded şekilde saklamıştık. Problemi bir sınıflandırma problemi olarak ele aldığımız için bu katmanın aktivasyon fonksiyonunu softmax olarak seçiyorum. Şayet problemi regresyon problemi olarak değerlendirseydik çıktı katmanında tek düğüm olmalıydı.

Eğitim konfigürasyonu

Modeli dizayn ettikten sonra optimizasyon algoritması ve kayıp fonksiyonunu belirlememiz gerekiyor. Sınıflandırma problemi olması sebebiyle kayıp fonksiyonunu cross-entropy olarak belirleyeceğiz. Optimizasyon algoritmasını da hızlı sonuca ulaşmak adına Adam olarak seçiyorum.

Eğitim

Python ile tensorflow kodu yazmışsanız hatırlarsınız, eğitimi gerçekleştiren fit komutunu ve tahminleme işlemi için de predict komutunu sırasıyla çağırıyorduk. Burada durum python’da olduğundan biraz farklı. Burada eğitim asenkron olarak gerçekleşiyor. Aşağıdaki gibi eğitimin ve tahmin işlemlerini ard arda çalıştırmayı denerseniz eğitim bitmeden ki ağırlıklar ile gerçekleşen tahmin değerlerini görürsünüz ve eğitimin düzgün gerçekleşmediği kanısına kapılırsınız.

Bunun yerine eğitimi tahmini kapsayacak şekilde yaparsanız bu sorun yaşanmayacaktır.

Test

Kodlama kısmı tamamlandı. Şimdi merhaba.html dosyasını çift tıklayarak tarayıcıda açabilirsiniz. Tarayıcıda boş ekran ile karşılaştığınız şaşırmayın. F12 tuşuna basarak (ya da ayarlar > daha fazla araçlar > geliştirici araçları > konsol sekmesi) tahminleri görüntüleyebilirsiniz.

Tarayıcıda TensorFlow.js’i çalıştırmak

 

Tarayıcıda bir makine öğrenmesi modeli yaratabildik. Ancak TensorFlow.js bunun çok daha ötesinde.

Sunucu tarafı

Node.js ile birlikte javascript’e sunucu tarafında yetenekler de eklenmiş oldu. Yukarıda yazdığımız kod (neredeyse) aynı kalarak sunucu tarafında da çalıştırabiliyoruz. Öncelikle Node.js‘i bilgisayarınıza yüklüyorsunuz. Ben denemelerimi bu yazıyı yazdığım gün için tavsiye edilen 8.11.4 versiyonu ile yapıyorum. Kurulumu gerçekleştirdikten sonra komut satırında node komutunu çalıştırabiliyor olmalısınız.

TensorFlow.js kurulumu

HTML kodunu yazarken ki gibi doğrudan referans gösterip kullanamayacağız. Öncesinde TensorFlow.js paketinin kurulumunu yapmamız gerekecek. Öncesinde node.js’i yeni kurmuş iseniz npm init komutunu çalıştırmanız gerekecek. Bu komut ile başlangıç konfigürasyonunun yapılmasını sağlayacağız. Aks takdirde tensorflow.js kurulumu hata vermekte. Sonrasında aşağıdaki komut ile node js package manager aracılığıyla kurulumu gerçekleştireceğiz.

npm install @tensorflow/tfjs –save

(Save’den önce çift tire kullanılıyor, tarayıcıda tek tire görünmekte)

Kodlama

Yapılacaklar bu kadar. Bu sefer merhaba.js isimli bir dosya oluşturuyoruz ve içeriği aşağıdaki gibi oluyor. Görüldüğü gibi referans gösterme kısmı harici kod tarayıcıda çalıştırdığımız ile bire bir aynı.

Sonrasında komut satırında node merhaba.js komutunu ile uygulamayı çalıştıracağız.

Node sunucusunda TensorFlow.js’in çalıştırılması

 

Görüldüğü gibi geliştirdiğimiz model XOR kapısının prensipleri başarı ile öğrenebildi.

Bu yazıda TensorFlow’un javascript versiyonunu inceledik. TensorFlow sadece araştırma için kullanılan bir araç değil. Örneğin Facebook PyTorch ve Caffe2 iskeletlerini derin öğrenme çalışmaları için geliştirmişken PyTorch’u araştırma niyetiyle, Caffe2’yi de üretim ortamında hizmet vermesi için kullanıyor. Öte yandan Google TensorFlow’u hem araştırma hem de canlı ortam için desteklemekte.

Bu yazı A Beginner’s Guide To TensorFlow.js yazısından Türkçe’ye çevrilmiştir.

Yorum yaz

Email adresiniz yayınlanmayacaktır.