Keras ve Tensorflow Nedir?
(Teachable Machine, Python ile Örneklendirilmiş) (Keras ve Tensorflow ile sıfırdan model eğitme)
Keras ve tensorflow derin öğrenme kütüphaneleridir. Kısaca derin öğrenme, yapay sinir ağının kullanıldığı ve birçok algoritma ile, bilgisayarın elindeki verilerden yeni veriler elde etme işlemidir.
Tensorflow Nedir?
İlk olarak isminin nerden geldiğine bakalım. Birebir çeviride “tensör akış” demektir. Tensör, matematikte çok boyutlu verinin simgelenebildiği geometrik bir nesnedir. Skaler denilen yönsüz nicel büyüklükler, vektör denilen yönlü büyüklükler ve matris denilen iki boyutlu nesneler birer tensördür. Bir tensör vektörler, skaler büyüklükler ve diğer tensörler arasındaki doğrusal ilişkileri ifade etmekte kullanılır.
Tensorflowa gelecek olursak; Tensorflow, yapay zekanın derin öğrenme çalışmaları yapan geliştiriciler için üretilmiş açık kaynaklı bir kütüphanedir. Sistem özelinde verilen verilerin kodlanması ve ayırt edilmeleri sağlanmaktadır. Her ne kadar Deep Learning uygulamaları bünyesinde kullanımı görülse de TensorFlow başlıca çok daha geniş bir alanı kapsamına almaktadır.
İlk olarak sadece python kullanılarak oluşturulan bu framework (yazılım iskeleti) daha sonraları , Javascript, C++, R gibi popüler diller tarafındanda desteklenmeye başlanmıştır.
Çok karmaşık olarak görünen modelleri bile esnek bir biçimde tasarlama olanağı tanıyan TensorFlow sayesinde graflar arasındaki tüm akış durumları da anlık olarak adım adım takip edilebilir. Hızlı geliştirme olanağı söz konusu olurken, verinin n-boyutlu bir dizisi Tensor olarak adlandırılmaktadır. Graflar ise hem tensor hem de matematiksel işlemlerden meydana gelmektedir. Diyagram çerçevesinde de anlatımı mümkün olurken düğümler oval şekilde, kenarlar dikdörtgen şekilde gösterilmektedir.
Hesaplamaların incelemesi elde edilirken graftların modellenmesi kütüphane kullanımıyla olur. Yazılan kodların farklı oturumlarla oluşturulması mümkün olurken her oturum farklı aygıtla kullanılabilir.
Javascript ile kullanıldığından söz etmiştik. Tensorflow.js’ nin bize sunduğu olanaklar sayesinde internet tarayıcımız üzerinden bile yapay zeka işlemleri yapabilmemiz mümkündür. Tensorflow.js sayesinde makine öğrenmesi modellerini kolayca eğitebiliriz. Google’ın kullanıcıların hizmetine ücretsiz olarak sunduğu demolar bulunmaktadır. Burdaki uygulamaları kendi görsellerimiz veya seslerimiz (veri setlerimiz) ile eğiterek deneyebiliriz. Teachable Machine sitesine buradaki linkten ulaşabilirsiniz…
Teachable Machine ile Tensorflow Çalışması
Şimdide Techable machine sayfası üzerinden kendi veri setimizi eğiterek bir model oluşturalım
Siteyi ilk açtığımızda bizi böyle bir ekran karşılıyor. Burda eğitmek istediğimiz veri setine göre seçim yapıyoruz. İstersek bir görsel ve ses dosyası ile çalışabilir ya da kişinin iskelet hareketlerinden yararlanarak veri seti eğitebiliriz.
İlk uygulama olarak image project seçelim ve karşımıza çıkan bu sayfayı inceleyelim.
Burada yapacağımız sınıflandırma adedine göre her bir sınıfa ait olan veri setlerimizi site üzerine yükleyerek isimlendiriyoruz. Bu aşamada kamera ile de eş zamanlı olarak verileri alabilmemiz mümkündür.
Burada eş zamanlı olarak kameradan aldığım görüntülerle 4 farklı veri oluşturalım. İlk veri setimde sağ elimi, ikinci veri setinde sol elimi kaldırdım. Üçüncü veri setinde çay içerken ve elimde çay bardağı tutarken görseller aldım. Dördüncü veri setinde aynı işlemi su şişesi ile gerçekleştirdim.
Daha sonra hazırlanılan veri setlerini eğitmek için “training” butonuna basıyoruz ve eğitme işleminin tamamlanmasını bekliyoruz.
Veri setimizin eğitimi gerçekleştirdikten sonra ise hangi sınıfa ait olduğunu merak ettiğimiz görseli modelimizin içine aktarıyoruz. Bunuda eş zamanlı olarak kameramızdan yapabiliriz. Aşağıdaki çıktı ekranında görüldü üzere kamera karşında su şisesi ile bir görsel üzerinde işlem yapıldığında %100 onarında bu görselin su içiyor veri sınıfına ait olduğunu tanımladı.
Aşağıdaki görselde de dört setinin de ayrı ayrı incelenip aldığı sonuçlar gösterilmiştir. Bazı görsellerde %100 doğruluk alırken bazılarında %90civarında kalınmıştır. Bu değerler bile bizim için hazılanan bu basit veri setlerine göre çok iyi karşılanacak sonuçlardır. Bu hata paylarının sebebi 4 veri setininde birbirine çok benzer olması ve setlerdeki verilerin çok fazla olmayışıdır.
Bu eğittiğimiz modeli bir projemizde kullanmak istiyorsak “export” butonuna basarak tensorflow ve keras projelerimizde kullanmak için javascript formatında indirebiliriz.
Keras Nedir ?
“Keras, Tensorflow 2 nin üst düzey API’sidir (Uygulama Programlama Arayüzü).
Keras, python’da yazılmış açık kaynaklı bir sinir ağı kütüphanesidir. Keras, tensorflow için bir arabirim görevi görür. CNN ve ANN gibi sinir ağları ile hızlı deneyler sağlamak için tasarlanmıştır.
Keras, derin sinir ağları kullanılarak bir kod yazmak için gerekli olan kodlamayı basitleştirme amacıyla görüntü ve metin verileriyle çalışmayı kolaylaştırır.
Araştırmacıların daha hızlı denemeler yapabilmeleri için geliştirilmiştir. Yüksek yineleme hızına sahip makine öğrenimi çözümleri geliştirmek ve göndermek için temel soyutlamalar ve yapı taşları sağlar.
Keras’ın Öne Çıkan Avantajları
Hem CPU hem de GPU üzerinde işlemlerinizi gerçekleştirebilmenizi sağlar.
Evrişimsel ve yinelemeli ağlar için önceden tanımlı modüller barındırmaktadır.
Python İle Keras ve Tensorflow
Şimdide python ile keras ve tensorflow kütüphaneleri yardımıyla sıfırdan bir görüntü nesne sınıflandırıcısı oluşturalım. (Kodun tam hali uygulamanın sonunda verilmiştir.)
Bu uygulamada önceden hazırlanmış bir keras modelinden faydalanmadan kendi belirlediğimiz dosyadaki jpeg dosyalarından bir model oluşturacağız. Bu uygulamada kedi ve köpeklerden oluşan veri setlerinden bir model oluşturarak kedi ve köpeği ayırt edebilen bir sınıflandırıcı oluşturacağız.
İlk olarak kedi ve köpek görsellerinden oluşan bir veri setine ihtiyacımız var. Bu linkten microsoft’un hazırlamış olduğu içinde bolca görsel bulunan kedi ve köpek görsellerinden oluşan veri setini indiriyoruz. İndirdiğimiz zip dosyanın içierisindeki kullanacağımız Petimages klasörünü ayrıştırıyoruz.
İlk olarak kütüphanelerimizi aktif ediyoruz
Gerçek görüntülerde (insan eliyle çekilmiş) bozukluk olması muhtemeldir. Aşağıdaki kodda dosyadan veri klasörlerini okuyarak dosyalardaki bozuk görüntüleri filtreliyoruz.
Çıktıdan da anlaşılacağı üzere veri setinden toplamda 1590 adet bozuk görsel silindi.
Şimdi sırdaki adımda elimizdeki verileri eğitim ve test modeli için iyiye ayıracağız. Kaç fark sınıflandırma yapılacağınıda bastıracağız.
Çıktı ekranından da anlaşılacağı üzere 2 farklı sınıfa ait 23410 veri bulundu ve bu verilerin 18728 tanesi eğitim için 4682 tanesi doğrulama testi için ayrıştırıldı. Yani kısaca verilerin %80'i eğitim modeline, %20'si test modeline ayrıldı.
Daha sonra eğitim seti içerisinden 9 adet görseli alarak, çıktıda da görüldüğü üzere, kedileri “0” köpekleri “1” olarak etiketlendirelim.
Şimdi ise veri setimizi genişletelim. Eğer elinizdeki veri seti yeterince büyük değilse görselleri rastgele yatay çevirmeler veya döndürmeler ile örnek çeşitliliğini yapay olarak arttırabiliriz. Bu durum, aşırı uyumu(overfitting) yavaşlatabilir.
Bunu çıktı ekranında da görüldüğü gibi uygulanan bir görsel üzerinde inceleyelim.
Yukarıdaki kod çıktısı olarak ulaştığımız görseli incelediğimizde elimizdeki 1 adet veriye belirli döndürme işlemleri uygulayarak 9 adet yeni görsel elde ettik.
Şimdide verilerimizi belli bir boyut içerisinde standartlaştırarak verileri önceden işleyeceğiz. Tercihe göre GPU ya da CPU üzerinde çalışabilirsiniz. Ben aşağıdaki kod ile GPU üzerinde çalışacağım. Daha sonraki kodda ise veri kümesini performan için yapılandırıyoruz.
Bu işlemlerden aşağıda görülen fonksiyon ile bir model oluşturuyoruz.
Artık son aşama olarak modelimizi eğitiyoruz. Alınan her veri ile ayrı ayrı işlem yapılacağı için bu aşama oldukça uzun sürecek…
Bu işlem çok uzun süreceği için tekrarı (epochs) 50 yerine 2 olarak ayarladım. (Bu şekilde bile çıktıda da görüldüğü gibi 1,5 saate yakın sürdü / Tabi bu süre bilgisayar pereformansı ve internet hızına göre değişiklik gösteresi muhtemeldir.)
Artık modelimiz hazır. Şimdi en güzel aşama olan test aşamasına geçebiliriz. İlk denemeyi aşağıdaki görsel ile gerçekleştirelim.
Çıktıdan da anlaşılacağı üzere bu kedi görselini modelimiz üzerinde test ettik ve %94 oranında kedi olarak bulduk. Bu rakam modeli eğitirken epochs’u 2 olarak ayarladığımızı varsayarsak bizim için çok başarılı bir sonuçtur.
Şimdide aşağıdaki köpek görseli ile modelimizi test edelim.
Bu sefer çıktımızın dopruluğunun bir önceki denemeye göre daha düşük olduğunu görüyoruz. Yinede %65 oranında köpek olarak bulduğumuz için başarılı olarak kabul edilebilir.
Modelimizin daha çok başarılı olmasını istiyorsak modelimizi daha ayrıntılı bir şekilde eğitebilir, veri setimizi artırabiliriz.
Model eğitimini gerçekleştirdikten sonra bilgisayarımızı aşağıdaki gibi bir dosya oluşturulur bu dosya sayesinde oluşturuğumuz modeli daha sonra başka bir projemizde de kullanabiliriz.
Kodun tam haline aşağıda linktini bıraktığım github hesabım üzerinden ulaşabilirsiniz.
Kaynaklar
1- Tensorflow Nedir?
2- Keras Nedir?
3-Keras