TensorFlow ile Rakam Sınıflandırma
Merhabalar, bu yazıda makine öğrenmesi kullanarak, resimlerdeki rakamların algılanmasını ele alacağız. Bunun için TensorFlow kütüphanesini ve Colab kullanıyor olacağız.
Öncelikle TensorFlow ve Colab’ın ne olduğundan bahsedelim.
TensorFlow Nedir?
TensorFlow, makine öğrenimi için ücretsiz ve açık kaynaklı bir yazılım kütüphanesidir. Bir dizi görevde kullanılabilir, ancak derin sinir ağlarının eğitimi ve çıkarımına özel olarak odaklanmaktadır.
Tensorflow, veri akışına ve türevlenebilir programlamaya dayalı sembolik bir matematik kitaplığıdır. Google’da hem araştırma hem de üretim için kullanılmaktadır.
TensorFlow, Google Brain ekibi tarafından Google’ın iç işlerinde kullanımı için geliştirilmiştir. 2015 yılında Apache License 2.0 sürümü altında piyasaya sürülmüştür.
Colab Nedir?
Colab veya diğer adıyla “Colaboratory”, tarayıcınızda Python kodu yazmanızı ve çalıştırmanızı sağlar. Hiç yapılandırma gerektirmez GPU’lara ücretsiz erişim imkanı sunar. Kolay paylaşım imkanı sunar.
Colab not defterleri; yürütülebilir kod, zengin metin, resimler, HTML, LaTeX ve diğer öğeleri tek bir dokümanda birleştirmenizi sağlar. Oluşturduğunuz Colab not defterleri Google Drive hesabınızda saklanır. Colab not defterlerinizi arkadaşlarınızla veya iş arkadaşlarınızla kolayca paylaşabilir, not defterlerinize yorum yapmalarını, hatta düzenlemelerini sağlayabilirsiniz.
Colab ile popüler Python kitaplıklarının tüm avantajlarından yararlanarak veri analiz edip görselleştirebilirsiniz.
Colab ile bir resim veri kümesini içe aktarabilir, üzerinde bir resim sınıflandırıcıyı eğitebilir ve modeli değerlendirebilirsiniz. Colab not defterleri Google’ın bulut sunucularında kod yürütür. Yani makinenizin gücünden bağımsız olarak, GPU’lar ve TPU’lar dahil Google donanımının gücünden yararlanabilirsiniz. Tek ihtiyacınız olan şey bir tarayıcıdır. Colab, makine öğrenimi topluluğunda yaygın olarak şu uygulamalarla kullanılır:
- TensorFlow’u kullanmaya başlama
- Nöral ağ geliştirme ve eğitme
- TPU’lar ile deneme yapma
- Yapay zeka araştırmalarını yayma
- Eğitici oluşturma
Colab’e Giriş
https://colab.research.google.com sitesi üzerinden kodumuzu yazacağız. Öncelikle yeni bir notebook oluşturuyoruz. File -> New notebook menüsünden yeni bir notebook oluşturacağız.
Kodlarımızı + Code butonuna bastığımızda açılan alana yazıyoruz.
Kodlarımızı aşağıdaki görseldeki gibi bloklar halinde yazabiliyoruz. Her blok kendi içerisinde ayrı ayrı çalıştırılabiliyor.
Kod dışındaki yorum ya da açıklamaları + Text butonuna bastığımızda açılan alana yazıyoruz.
Modelinizi açıklayacak resimleri ve yazılarınızı aşağıda görüldüğü gibi text alanına yazabilirsiniz.
Keras Nedir?
Keras, Python’da yazılmış açık kaynaklı bir sinir ağı kütüphanesidir. Keras TensorFlow, Microsoft Cognitive Toolkit, R, Theano veya PlaidML ile beraber çalışabilir. Derin sinir ağları ile hızlı deney yapabilmek için tasarlanan bu araç kullanıcı dostu, modüler ve genişletilebilir olmaya odaklanıyor.
10 adet rakamımız olduğu için classification class sayımız 10 olacaktır. Resimlerimizin boyutlarını hızlı işleyebilmek için 28x28 olarak seçtik.
28x28 = 764 olduğundan feature sayımız 764 olarak ayarlanmıştır.
Eğitim için kullanılan sabit parametreler:
- “learning_rate” 0 ile 1 arasında tercih ettiğimiz bir değer. Artırıp azaltarak istediğimiz oranı yakalayabiliriz.
- “batch_size” resimleri ayırmak için kullandığımız değerdir ve 256 olarak ayarladık.
- 2 adet hidden layer tanımladık. Yapay sinir ağındaki hidden layer, giriş katmanları ve çıkış katmanları arasındaki bir katmandır; burada yapay nöronlar, bir dizi ağırlıklı girdi alır ve bir aktivasyon fonksiyonu yoluyla bir çıktı üretir.
Makina öğrenmesi için gereken dataları MNIST üzerinden indiriyoruz.
MNIST veri tabanında 60 bin adet rakam ve 10 bin adet test görseli bulunmaktadır.
Eğitim ve test için kullanacağımız görsellerdeki piksellerimizi öncelikle tek boyutlu bir dizide 28 x 28 = 764 olacak şekile çeviriyoruz. Daha sonra piksellerimizin değerlerini 0–255‘den 0–1 aralığına indirgiyoruz.
Bu aşamada eğitim için kullanılacak modelimizi oluşturabiliriz.
Keras’da katmanları temsil eden “Dense” en çok kullanılan sınıflardan biridir. Dense ile katmanlar arasında nöron ya da düğümlerin geçişlerini sağlar. Bir başka deyişle, bir katmandan aldığı nöronları bir sonraki katmana girdi olarak bağlanmasını sağlar. Dense metodunda belirtilen “units” parametresi ile 128 ve 256 nöronlu hidden katmanlar oluşturulmuştur.
Gizli katmanlarda en yaygın olarak kullanılan aktivasyon fonksiyonlarının başında ReLU (Rectified Linear Unit) gelir. Formülü ve grafiği aşağıda gösterildiği gibidir.
Gelen girdi değeri 0’ dan büyük ise aynen, değişmeden çıktı olarak verilir. Bir nevi doğrusal fonksiyon gibi çalışır. Eğer 0’ dan küçük eşit ise direkt 0 olarak çıkar.
Softmax fonksiyonu çoklu sınıflandırmalarda kullanılır. Çıktı olarak vektör verir. Formülü şekildeki gibidir.
Çıktı vektörü her bir sınıfın olasılık değerinin tutar. Bu olasılık değerlerinin toplamı 1.0 eder. Örnek olarak 0’ dan 9’ a kadar olan rakamların görsellerini modelimize verdiğimizde çıktı olarak [0.03, 0.07, 0.1, 0.04, 0.005, 0.001, 0.06, 0.67, 0.02, 0.004] vektörünü veriyor ise resimde %67 olasılığında 7 rakamı var diyebiliriz.
Cross entropy loss, çıktısı 0 ile 1 arasında bir olasılık değeri olan bir sınıflandırma modelinin performansını ölçer.
Burada training işlemimizi yapıyoruz. Accuracy değerinin adımlar ilerledikçe arttığını görmekteyiz.
Training sonucunda çıkan accuracy değeri 0.965400 olarak görünmektedir.
Matplotlib, Python programlama dili ve sayısal matematik uzantısı NumPy için bir çizim kitaplığıdır.
Test için 5 adet resim seçtik ve modelimizin tahminlerini Matplotlib ile görselliğe döktük.
Test tahmini sonucu çıkan modelimizin tahminleri görüdüğü üzere doğru bir şekilde yapılmıştır.
Yazıya destekleri için Naci özyıldırım, Sefa Akşit ve Hüseyin Aslan’ a teşekkürler.