İleri Beslemeli Sinir Ağı ile El Yazısı Sınıflandırma #4

Eksik/Güncel Olmayan Bilgi Raporla

Giriş

Serinin üçüncü yazısında yapay sinir ağları ve ileri beslemeli yapay sinir ağlarına değinmiştik bu yazıda ise  DL4J kütüphanesi kullanarak ileri beslemeli bir yapay sinir ağı oluşturacağız. MNIST veri setini kullanarak sinir ağını eğitecek ve el yazılarını tahmin etmeye çalışacağız. MNIST veri seti ile ileri beslemeli bir yapay sinir ağı kurarak sınıflandırma yapmak, makine öğrenmesi için başlangıç niteliğinde bir uygulamadır. Tensorflow, Kaggle, Caffe ve tabiki DL4J için de vazgeçilmez bir başlangıç olacaktır.

Problem ve Çözüm

Problemimiz el yazısı ile yazılmış olan rakamları OCR ile tespit edememek. OCR yani optik karakter okuma görüntü işleme içerisinde yer alabilecek, belirli fontlar ile yazılmış metinleri görsel üzerinden ayrıştırarak tekrar metin haline getirmektir. OCR kütüphanelerinin yaşadığı zorluklardan bir tanesi el yazı ile yazılmış metinleri analiz edememesidir. Bu problemin çözümü için önerilen yol, bir yapay sinir ağı oluşturmak ve bu sinir ağı ile metni analiz etmeye çalışmaktır. Sinir ağının eğitimi için ise bolca el yazısı verisine ihtiyaç duyulmaktadır, bu veri ihtiyacını ise mnist veri seti karşılamaktadır.

MNIST

Mnist bir veri setidir. IDX dosya formatını kullanmaktadır bu dosya formatı ile veriler vektör şeklinde saklanabilmektedir. Mnist veri seti içerisinde el yazısı ile yazılmış rakamlar yer almaktadır, ayrıca bu rakamların ne olduğuda etiketlenmiştir bu sayede sinir ağını eğitirken ağa hangi girdinin sonucunun ne olduğu verebiliriz, hatırlarsanız bu tür bir öğrenme modelinin “Gözetimli Öğrenme” olduğuna değinmiştik. Bu veri seti içerisinde yaklaşık 70.000 adet ver bulunmaktadır, bunların 60.000 tanesi eğitim, 10.000 tanesi ise test için kullanılmak üzere ayrılmıştır.

MNIST Veri Seti Görünümü

MNIST Veri Seti Görünümü

DL4J kütüphanesi içerisinde mnist veri setine erişim için kolaylık olmasına adına “MnistFetcher.java” sınıfı geliştirilmiştir. Bu sınıf veri setini indirme ve dizine çıkarma işlemlerini yapmaktadır. Örnek projeyi doğrudan çalıştırdığınızda veri setini “user home” dizinine MNIST klasörü içerisine indirecektir. Bu sınıfa aşağıdaki bağlantıdan göz atabilirsiniz.

https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j-core/src/main/java/org/deeplearning4j/base/MnistFetcher.java

Veri setini http://yann.lecun.com/exdb/mnist/ adresinden veya aşağıdan manuel olarak kendiniz de indirebilirsiniz. Öncelikle eğitim için kullanacağımız “training set images” ve bu görsellerin etiketlerini “training set labels” indirin. Eğitim sonucu ağı test etmek için kullanacağımız “test set images” ve “test set labels” dosyalarını da indirin. Dosyaları UserHome dizinine MNIST klasörü oluşturarak buraya taşıyın, eğitim ve test için kalan süreçleri dl4j kendisi halledecektir. (Windows için dizin Root\Users\username\MNIST\ şeklindedir.)

train-images-idx3-ubyte.gz training set images (9912422 bytes)
train-labels-idx1-ubyte.gz training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz test set labels (4542 bytes)

Sinir Ağının Oluşturulması

İleri beslemeli (feed forward) bir yapay sinir ağı oluşturacağız. Yapay sinir ağının öğrenme süreci için ise Supervised Learning (Gözetimli Öğrenme) modelini kullanacağız. MNIST veri setinde yer alan görseller 28 x 28 piksel boyutlarına sahiptir bu sebeple sinir ağının girişi 28 *28=784 adet, rakamları tahmin edeceğimiz içinde  sıfırdan dokuza 10 adet çıkışa sahip olacak. Sinir ağında gizli katman sayımız ise 1 olacak, bu sayede basit ve anlaşılır bir model oluşturmuş olacağız.

Sinir Ağının Görsel Modeli

Sinir Ağının Görsel Modeli

Kodlama

Öncelikle bu örneğin kaynak kodunu aşağıdaki github deposundan çekebilirsiniz. Nasıl yapıldığını bilmiyor iseniz bu https://www.youtube.com/watch?v=Jm7HDGFayvk göz atabilirsiniz.

Yorumlar

yorumlar





Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir