Paid-by-themewiki.top
EnglishFrenchGermanItalianJapanesePortugueseRussianSpanishTurkish

MNIST Veri Seti İle El Yazısı Rakam Tanıma Projesi

Bu Yazıda El ile Yazılan/Çizilen Rakamları MNIST Veri Seti ve Yapay Zeka (Yapay Sinir Ağları - Derin Öğrenme (CNN)) Kullanarak Tanımaya Çalışacağız.

Projeye Genel Bir Bakış

El Yazısı Rakam Tanıma, El ile Yazılan Rakamların Bilgisayar Sistemleri Tarafından Tanınmasıdır. İnsanlar için Oldukça Kolay Olmasına Rağmen Makineler için Bu İşlem Zordur. Bunun Nedeni El Yazısıyla Yazılan Rakamlar Mükemmel Değildir ve Her İnsan için Farklı Olabilir. Makinelerin Bu İşlemi Başarması için Geçmiş El Yazısı Rakam Resimlerinden Öğrenme Yaparak Yorumlama ve Genelleme Yapması Gerekir. Genelleme, Makinenin Önceden Hiç Görmediği Bir El Yazısı Rakam Resmini Doğru Olarak Yorumlaması, Tahmin Etmesidir.

El Yazısı Rakam Resimlerinin Bir Sistem Tarafından Yüksek Doğrulukla Tanınabilmesi için Yapay Zekâ Kullanmamız Gerekir. Bu Nedenle Günümüzde de Çok Popüler Makine Öğrenmesi Tekniği Olan Yapay Sinir Ağları (Artificial Intelligence Network) ve Yapay Sinir Ağlarının Gelişmişi Olan Derin Öğrenmeyi Kullanabiliriz. Bu Projede Bir Derin Öğrenme Tekniği Olan ve Genellikle Görüntü Sınıflandırma için Kullanılan CNN (Convolutional Neural Network) Kullandım.

Yapay Sinir Ağları, İnsan Beyninin Özellikleri Kullanılarak Geliştirilen Bir Makine Öğrenmesi Yöntemidir. Sinir Sistemimizdeki Nöronlar Geçmiş Verilerden Nasıl Öğrenme Yapıyorsa, Yapay Sinir Ağları da Verilerden Öğrenip Tahmin veya Sınıflandırmayı Otomatik Şekilde Yapabilmektedir. YSA, Girdiler ve Çıktılar Arasında İlişki Kuran Doğrusal Olmayan İstatistiksel Bir Modeldir. Görüntü İşleme, Konuşma Tanıma ve Tıbbı Teşhis gibi Alanlarda Kullanılmaktadır. Yapay Sinir Ağının Bazı Özellikleri; Genelleme, Doğrusal Olmama, Hata Toleransı ve Öğrenmedir.

CNN, Genellikle Girdi Olarak Resimler Alan ve Görüntü İşleme için Kullanılan Bir Derin Öğrenme Ağı veya Tekniğidir. Klasik Yapay Sinir Ağlarında Çok Fazla Özellik Girişi Olduğundan Dolayı Yavaş Çalışabilir. CNN’de Mümkün Olan En Az Sayıda Giriş (Özellik) ile En Yüksek Başarı İstenir. Bu Nedenle Veriden Doğru Özelliklerin Çıkarılması Gerekmektedir. Veriden Özellik Çıkarma (Data Feature Extraction), Makine Öğrenmesinde Başlı Başına Bir Alandır. Doğru Özelliklerin Seçilmesi Zorluğunu Ortadan Kaldırmak için CNN’de Özellik Çıkarımı Ağ İçinde Yapılmaktadır. CNN’de Verilerden Otomatik Olarak Özellik Çıkarılmasında Filtreler Kullanılmaktadır.

Projede Programlama Dili Olarak Basit Olması ve Kütüphane Desteğinden Dolayı Python Tercih Ettim. Geliştirme Ortamı Olarak PyCharm Programını Kullandım. CNN Modelini Oluşturma, Eğitme, Test Etme ve Kaydetme İşlemleri için Derin Öğrenme Kütüphanesi olan Python Keras Kütüphanesini Kullandım. Kullanıcı ile Etkileşime Geçebilmek için Python Gradio Kütüphanesi ile Web Sayfası Üzerinde Arayüz Oluşturdum. Projedeki Verilerin Kaydedilebilmesi için Python SQLite Kütüphanesini Kullandım. Veritabanındaki Verilerin Web Sayfası Üzerinde Görüntülenebilmesi için Python Flask Kütüphanesini Kullandım.

Projede Bir Web Sayfası Üzerinde 28x28 Boyutundaki Boş Bir Panoya Kullanıcı Tarafından 0 ile 9 Arasında Bir Rakam Çizildikten Sonra Gerekli Butona Basılarak Çizilen Rakam Sistem Tarafından Otomatik Olarak Tanınmakta ve Kullanıcı İsterse Çizdiği Rakamı Veritabanına Kaydedebilmektedir. Veritabanında Çizilen Rakamın Resmi, Sistem Tarafından Tahmin Edilen Rakam ve Tahmin Edilen Rakamın Doğruluk Değeri Bilgileri Tutulmaktadır.

Gereksinimler

Python

Programlama Kısmında Python Programlama Dili Kullandım. Bunun Nedenleri Python’un Görece Basit Olması, Platform Bağımsız Olması, Yorumlanan Bir Dil Olmasından Ötürü Diğer Programlama Dillerine Göre Daha Hızlı Çalışması ve Geniş Harici Kütüphane Desteği Sayesinde Hızlı Bir Şekilde Uygulama Geliştirilebilmesidir. Projede Python 3.9.6 Sürümünü Kullandım.

PyCharm

Projede Geliştirme Ortamı için JetBrains Firmasına Ait PyCharm Programlama Platformunu Kullandım. Bunun Nedenleri Otomatik Kod Tamamlama, Harici Kütüphane Yükleme Arayüzü, Debug Desteği gibi Özellikler İçermesidir. Projede PyCharm 2021.2.1 Sürümünü Kullandım.

Keras

Keras Açık Kaynak Kodlu Derin Öğrenme Kütüphanesidir. Keras Kütüphanesi, Tensorflow Üzerinde Çalışan Yüksek Seviyeli Bir API’dir. Keras Kütüphanesi ile Kolayca Derin Öğrenme Modeli Oluşturup Eğitilebilmekte ve Bunun için İçerisinde Kullanışlı Fonksiyonlar Bulundurmaktadır. Keras Kütüphanesi, Derin Öğrenmeyi Yeni Öğrenenler için Önemli Bir Avantaj Sağlar. Oluşturulan Derin Öğrenme Ağ Modelleri CPU veya GPU’da Çalıştırılabilir. Ayrıca Keras, CNN ve RNN Ağlarını da Destekler. Projede Keras 2.6.0 Sürümü Kullanılmıştır.

Keras Kütüphanesi Tensorflow Üzerinde Çalıştığı için Tensorflow Kütüphanesinin Ayrı Olarak Yüklenmesi Gerekmektedir. Ayrıca Keras Kütüphanesi ile Otomatik Olarak NumPy Kütüphanesi de Yüklenmektedir. Bilgisayar Ortamında Görüntüler Birer Matristir. Matrisin Her Bir Değerine de Piksel Denir. Bu Nedenle Görüntü Matrislerinin Boyutunu Öğrenmek ve Matrisleri Yeniden Şekillendirmek için NumPy Kütüphanesini Kullandım.

Gradio

Gradio, Grafiksel Arayüz Oluşturma Amaçlı Kullanılan Açık Kaynak Kodlu Bir Kütüphanedir. Genellikle Derin Öğrenme Ağ Modellerini Test Etmek için Kullanılır. İçinde Hazır Olarak Gelen Özelleştirilebilir Giriş ve Çıkış Arayüz Bileşenlerini Barındırır.

Projede Kullanıcı ile Etkileşimin Sağlanması, Kullanıcının Web Sayfası Üzerinde Rakam Çizebilmesi, Çizilen Rakamın Sistem Tarafından Tahmin Edildikten Sonra Sonuçların Arayüzde Gösterilmesi ve Sonuçların Veritabanına Kaydedilmesini Sağlamak için Gradio Kütüphanesi ile Arayüz Oluşturdum. Projede Gradio 2.3.5 Sürümü Kullanılmıştır.

SQLite

SQLite, Veritabanı İşlemleri için Kullanılan Tamamen Ücretsiz, Sunucu Yazılımı Gerektirmeyen, Dünyada En Çok Kullanılan İlişkisel Bir SQL Veritabanı Motorudur. SQLite, Diğer Veritabanı Motorlarından Farklı Olarak Ayrı Bir Sunucuya İhtiyaç Duymaz ve Doğrudan Disk Dosyalarına Yazar ve Okur. SQL Veritabanı Tek Bir Dosyada Tutulur.

Projede Elde Edilen Sonuçların Kaybolmaması ve Sonuçların Tek Bir Dosyada Tutulması için SQLite Veritabanını Kullandım.

Flask

Flask, Armin Ronacher Tarafından Geliştirilen Bir Web Geliştirme Çatısıdır. Diğer Web Geliştirme Kütüphanelerine Göre Basit ve Hazır Yapısı ile Öne Çıkmaktadır. Flask Kütüphanesi Netflix, Reddit, Mozilla, Red Hat gibi Global Şirketler Tarafından Kullanılmaktadır.

Projede Veritabanının Web Tarayıcısı Üzerinden Görüntülenmesi için Flask Kütüphanesi Kullanıldı. Ayrıca Flask Kütüphanesinin Bir Uzantısı Olan SQLAlchemy, Veritabanı işlemlerinde SQLite Kütüphanesi ile Kullanılmıştır.

Süreç

Projedeki Süreçler Özet Şekilde Aşağıda Açıklanmıştır:
  1. Derin Öğrenme Ağ Model Türünü Belirledim.
  2. Derin Öğrenme Ağ Modelini Oluşturdum.
  3. Derin Öğrenme Ağ Modelini Eğitmek için Veri Setini Belirledim.
  4. Derin Öğrenme Ağ Modelini Veri Seti ile Eğittim.
  5. Derin Öğrenme Ağ Modelini Test Veri Setini Kullanarak Test Ettim ve Başarısını Ölçtüm.
  6. Derin Öğrenme Ağ Modelini Daha Sonra Kullanmak Üzere Diske Kaydettim.
  7. Kullanıcı ile Etkileşime Geçmek için Grafiksel Arayüz Tasarladım. Arayüz Üzerinde Kullanıcı Rakam Çizdikten Sonra Gerekli Butona Bastığında Çizilen Rakam Resmini Önceden Diske Kaydettiğim Derin Öğrenme Ağ Modelini Kullanarak Tahmin Ettirdim ve Sonuçları Arayüzde Gösterdim.
  8. Arayüz Üzerinde Kullanıcının Çizdiği Rakamın Resmini, Çizilen Rakamın Tahminini ve Doğruluğunu Gerekli Butona Basarak Veritabanına Kaydedebilmesini Sağladım. Ayrıca Arayüz Üzerinde Kullanıcı Gerekli Butona Basarak Çizilen Rakamı Silebilmesini ve Yeni Bir Rakam Çizerek Bu Rakamın Tahmin Ettirebilmesini Sağladım.
  9. Veritabanının Web Tarayıcısı Üzerinden Görüntülenmesini Sağladım.

Projenin Uygulanması

CNN Modeli Birçok Katmandan Meydana Gelmektedir. CNN’de Bulunan Temel Katmanlar; Giriş, Konvulasyon, Aktivasyon, Havuzlama (Pooling), Düzleştirme (Flatten) ve Tam Bağlantılı Yapay Sinir Ağı (Fully Connected Neural Network) Katmanlarıdır.

Giriş Katmanı, Düzensiz Verilerin Ağa Verildiği Kısımdır. Örnek Olarak Görüntüler, Belirli Değerler Taşıyan Matrislerdir.

Orijinal Görüntü Üzerinde Filtreler ile Özelliklerin Otomatik Bir Şekilde Çıkarılması için Konvulasyon Katmanı Ekledim. Filtre, 3x3, 5x5 gibi Boyutlarda Olabilen Bir Matristir. Konvulasyon Katmanında Filtre Sayısı, Filtre Boyutu, Kanal ve Girdi Boyutu gibi Parametreler Mevcuttur. Filtre Sayısı, CNN’de Derinliği Belirler ve Her Bir Filtre Görüntüden Farklı Özellikleri Çıkarmaktadır. Girdi Boyutu ise CNN Modeline Verilecek Olan Verinin Boyutudur. Projedeki Veri Görüntü Olduğundan Buraya Orijinal Görüntünün Boyutlarını Verdim. Görüntü Renkliyse (RGB) Kanal Parametresi 3, Görüntü Parlaklık Resmiyse Kanal Parametresi 1 Olmaktadır. Projede Parlaklık Resimleri Üzerinde Çalıştığımdan Dolayı Kanal Parametresini 1 Olarak Belirledim. Filtre Sayısı ve Filtre Boyutu Parametreleri Genellikle İsteğe Bağlı Olarak Belirlenir ve Optimum Değerlerin Bulunması Gerekir. Bu Parametre Değerlerini Deneme Yanılma Yöntemi ile Proje İçinde Sürekli Değiştirerek En Yüksek Başarıyı Sağlayacak Parametre Değerlerini Bulmaya Çalıştım.

Yapay Zekâda Genel Bir Problem Olan Doğrusallığı Engellemek için ReLu Aktivasyon Katmanını Ekledim. Konvulasyon Katmanında Elde Edilen Değerler, Aktivasyon Katmanında Belirli Bir Eşik Değere Göre Çıktı Vermektedir. ReLu Aktivasyon Katmanında Değer 0’dan Küçükse Çıktı 0, Değer 0’dan Büyükse Çıktı Değerin Kendisi Olmaktadır.

Konvulasyon Katmanında Görüntüden Gerekli Özellikler Çıkarıldığı için Görüntü Boyutu Düşmektedir. Görüntü Boyutunun Daha da Fazla Düşmesi için MaxPooling Katmanı Ekledim. Böylece Gereken İşlem Gücü Azalmaktadır.

Konvulasyon ve Aktivasyon Katmanından Geçen Verileri Tam Bağlantılı Yapay Sinir Ağı (Fully Connected) Katman Girişine Uygun Hale Getirmek için Düzleştirme (Flatten) Katmanı Ekledim. Tam Bağlantılı Yapay Sinir Ağı, Giriş Verilerini Genellikle Tek Boyutlu Bir Matristen Alır. Flatten Katmanının Amacı Matris Formundaki Veriyi Tek Boyutlu Hale Dönüştürmektir. Aşağıdaki Resimde 3x3 Boyutundaki Bir Matrisin Düzleştirme (Flatten) İşlemi Sonrası Tek Boyutlu Matrise Dönüştürülmesi Gösterilmektedir.

                                                    
CNN Modelindeki En Önemli Katman Olan Tam Bağlantılı Yapay Sinir Ağı (Fully Connected Neural Network) Katmanını Ekledim. Yapay Sinir Ağında Nöronlar Hiyerarşik Olarak Birleşir. Temel Olarak Yapay Sinir Ağı; Giriş Katmanı, Gizli Katman ve Çıkış Katmanından Oluşur. Bu Katmanların Özelliği, Birbirine Tam Bir Şekilde Bağlı Olmasıdır. Giriş Katmanında Düzleştirme (Flatten) Katmanından Gelen Tek Boyutlu Matris Girdi Olarak Alınır. Gizli Katmanda, Giriş Verileri Üzerinde Çeşitli Matematiksel Hesaplamalar Gerçekleştirilir. Gizli Katman Sayısı ve Her Gizli Katmandaki Nöron Sayısı İsteğe Bağlı Olarak Değişebilmektedir. Değişen Bu Parametrelerin Probleme Özel Olarak Optimize Edilmesi Gerekir. Bu Parametreleri Deneme Yanılma Yöntemi ile Proje İçinde Sürekli Değiştirerek En Yüksek Başarıyı Sağlayacak Parametreleri Bulmaya Çalıştım.

Tam Bağlantılı Yapay Sinir Ağındaki Gizli Katmandan Sonra Dropout Katmanı Ekledim. Bu Katmanın Amacı, Modelin Eğitim Aşamasında Ezberlemesini (Overfitting) Önleyip Genelleme Yapabilmesini Sağlamaktır.

Tam Bağlantılı Yapay Sinir Ağındaki Çıkış Katmanında Gizli Katmanda Yapılan Hesaplamaların Sonucu Elde Edilir. Benim Projemde Toplam 10 Adet Sınıf Olduğundan (0 – 9 Arasındaki Rakamlar) Bu Katmanda 10 Adet Çıkış (Nöron) Bulunmaktadır. Çıkış Katmanından Sonra Softmax Aktivasyon Katmanı ekledim. Bunun Nedeni 10 Adet Çıkış Değerinin Olasılıksal Olarak Hesaplanmasını Sağlamaktır. Böylece Arayüz Üzerinde Çizilen Bir Rakamı CNN Modeli ile Tahmin Ettirirken Tahmin Doğruluğunu Olasılıksal Olarak Görebilmekteyiz.

CNN Modelini Oluşturduktan Sonra Bu Modeli Eğitmek için MNIST Veri Setini Kullandım. MNIST Veri Seti, 0’dan 9’a Kadar El Yazısıyla Yazılmış 60000 Eğitim Görüntüsü ve 10000 Test Görüntüsü İçermektedir. Dolayısıyla MNIST Veri Setinde 10 Farklı Sınıf Mevcuttur. Her Görüntü Gri Tonlamalı ve 28x28 Boyutunda Matris Olup Toplam 784 Pikseldir. MNIST Veri Setindeki Görüntü Matrislerinin Piksel Değerleri 0-255 Arasındadır ve Daha Yüksek Değerler Daha Koyu Anlamına Gelmektedir. Eğitim Veri Seti, 60000 Satır ve 785 Sütuna Sahiptir. Son Sütun, Görüntülerin İlişkili Olduğu Etiketi (0-9 Arasında Rakam) Belirtir. Diğer 784 Sütun ise Görüntü Matrisinin Piksel Değerlerini İçerir. Satır Sayısı ise Veri Sayısını Belirtmektedir. MNIST Veri Seti, Python Keras Kütüphanesinde Hazır Olarak Mevcuttur. Böylece Python Keras Kütüphanesi ile MNIST Veri Setini Projeme Aktardım.

MNIST Veri Setindeki Örnek İki Görüntü

CNN Modelinin Nasıl Eğitileceğini Bildirmek için Modelin Derlenmesi Gerekmektedir. Modelin Derlenmesinde Temel Olarak Kayıp Fonksiyonu (Loss Function), Optimizasyon Algoritması ve Metrik Parametrelerinin Belirtilmesi Gerekmektedir. Kayıp Fonksiyonu, Gerçek Değer ile Tahmin Edilen Değer Arasındaki Hatayı Hesaplar. Sınıflandırma Problemleri için Genellikle categorical_crossentropy Kayıp Fonksiyonu Kullanılmaktadır ve Projemde de Bunu Kullandım. Optimizasyon Algoritması, Eğitim Sırasında Tam Bağlantılı Yapay Sinir Ağı Katmanlarındaki Nöronların Ağırlık Değerlerinin Güncellenmesinde Kullanılır. Projede Adam Optimizasyon Algoritmasını Tercih Ettim. Metrik, Modelin Test Edilme Sırasındaki Hatayı Değerlendirme Kriteridir. Projede Accuracy Metrik Parametresini kullandım. Modelin Derlenmesini Python Keras Kütüphanesi ile Yaptım.

CNN Modelini MNIST Eğitim Veri Seti ile Eğitmek için 6 Adet Parametre Gerekmektedir:

  1. Eğitim Verisi, MNIST Eğitim Veri Setindeki İlk 784 Sütundaki Matris Değerleridir.
  2. Etiket Verisi, MNIST Eğitim Veri Setindeki Son Sütundaki Matris Değerleridir.
  3. Doğrulama (Validation) Verisi, Modelin Eğitilmesi Esnasında Test Edilebilmesi için Kullanılır. Doğrulama Verisi Olarak MNIST Test Veri Setini Kullandım. Böylece Model Eğitilirken Modelin Başarısı Anlık Olarak Gözlemlenebilmektedir.
  4. Epoch, Model Eğitiminde Eğitim Verilerinin Kaç Kez Yineleneceğini Belirler. Projede Bu Parametreyi 20 Olarak Belirledim. Fakat Bu Parametre İsteğe Göre Değişebilir, Optimum Değerinin Bulunması Gerekmektedir.
  5. Batch Size, Tam Bağlantılı Yapay Sinir Ağındaki Nöron Ağırlıklarının Güncellenmesi için Eğitim Veri Setinin Ne Kadarının Kullanılacağını Belirler. Projede Bu Parametreyi 150 Olarak Belirledim. Bunun Anlamı Her 150 Adet Eğitim Verisinde Bir Kayıp Fonksiyonu ile Hata Hesaplanır ve Adam Optimizasyon Algoritması ile Nöron Ağırlıkları Güncellenir. MNIST Eğitim Veri Setinde 60000 Veri Olduğundan 1 Epoch’ta 400 İterasyon Vardır.
  6. Shuffle, Her Bir Epoch’dan Önce Eğitim Verilerinin Yerlerini Değiştirir. Modelin Performansını Arttırması için Kullanılır.

Python Keras Kütüphanesi ile Bu Parametreleri Kullanarak CNN Modelini Eğittim. Eğitim Yaklaşık Olarak 5 Dakika Sürdü.

Eğitilmiş Olan CNN Modelini Test Etmek için MNIST Test Veri Setini Kullandım. Bu Test Verileri Aslında Model Eğitilirken Doğrulama (Validation) Verisi Olarak da Kullanıldı. Sonuç Olarak Test Verileri, Modelin Eğitiminde Kullanılmamıştır, Modelin Hiç Görmediği Yeni Verilerdir. Python Keras Kütüphanesini Kullanarak Test Verileri ile CNN Modelini Test Ettiğimde Yaklaşık Olarak %99 Başarı Oranı Elde Ettim.

Python Keras Kütüphanesi ile Eğitilmiş CNN Modelini h5 Dosya Formatında Diske Kaydettim. Yeni Bir Python Script'i Oluşturup Python Keras Kütüphanesi ile Diskteki CNN Modelini Projeme Aktardım. Böylece Proje Her Çalıştırıldığında CNN Modelinin Oluşturulup Eğitilmesinin Önüne Geçmiş Oldum.

Kullanıcı Tarafından CNN Modeline Dışarıdan 28x28 Boyutunda El Yazısı Rakam Resmi Verip Bu Resmin Tahmin Edilmesini Sağlamam Gerekiyordu. Bu Nedenle Python Gradio Kütüphanesi ile Bir Arayüz Oluşturdum. Arayüz Üzerinde 28x28 Boyutunda Beyaz Bir Boş Pano Ekledim. Kullanıcı Panoya Siyah Renkte Rakam Çizebilmektedir. Kullanıcının Çizdiği Rakamı Backend Tarafına Gönderebilmesi için Yeşil Renkte Bir Buton Ekledim. Panoda Çizilen Rakam Resmini CNN Modeline Vererek Tahmin Edilen Rakamı ve Doğruluk Değerini Panonun Sağ Tarafında Olacak Şekilde Arayüz Üzerinde Gösterdim. Ayrıca Panonun ve Sonuçların Temizlenmesi için Beyaz Renkte Bir Buton Ekledim. Arayüzün Aşağı Tarafında ise Proje ile Bilgiler Vererek Kullanıcıyı Bilgilendirdim.

Kullanıcının Çizdiği Rakam Resmini ve Sonuçları Veritabanına Kaydedebilmesi için Arayüz Üzerinde İki Adet Kontrol Kutusu Oluşturdum ve Varsayılan Olarak “Hayır” Kontrol Kutusu Seçili Durumdadır. Kullanıcı Verileri Kaydetmek için “Evet” Kontrol Kutusunu Seçtikten Sonra Yeşil Butona Basması Gerekmektedir. Butona Bastıktan Sonra Yeni Bir Web Tarayıcı Sekmesinde Otomatik Olarak Veritabanı Giriş Sayfası Gelmektedir. Bu Sayfada Kullanıcının Giriş Bilgileri ile Oturum Açması Beklenmektedir. Eğer Kullanıcı Başarı ile Oturum Açarsa Veritabanını Görüntüleyebilmektedir.

Veritabanı Giriş Sayfasını Oluşturmak için HTML ve CSS Framework’ü Olan Bootstrap Kullandım.

Projede Backend Tarafındaki Veritabanı İşlemlerini Yapabilmek için DB Browser (SQLite) Programı ile db Formatında Veritabanı Dosyası Oluşturdum ve Gerekli Tabloları Ekledim. Daha Sonra Python SQLite Kütüphanesi ile Veritabanı Dosyasını Projeme Aktardım ve Arayüz Üzerinden Gelen Verileri Veritabanına Kaydetmek için Bir Fonksiyon Oluşturdum.

Arayüz Üzerinden Gelen Verileri Veritabanına Kaydetmeyi Başarmıştım, Fakat Bu Verileri Yalnızca DB Browser Programında Görebiliyordum. Bu Nedenle Veritabanındaki Verileri Web Tarayıcısı Üzerinde Gösterdim. Veritabanındaki Verilerin Web Sayfası Üzerinde Düzenli ve Tasarımsal Olarak Güzel Bir Şekilde Göstermek için Frontend Tarafında Bootstrap DataTable Yapısını, Backend Tarafında ise Python Flask ve SQLite Kütüphanelerini Kullandım.

Veritabanı Dosyasından Alınan Veriler, Veritabanı Görüntüleme Sayfasında Resim, Tahmin ve Doğruluk Alanlarında Gösterilmektedir.

“Tahmin Doğru mu?” Alanında ise Bir Kontrol Kutusu Oluşturdum. Bu Kontrol Kutusunun Amacı, Resim Tahmininin Doğru Olup Olmadığını Belirleyebilmektir. Yönetici, Veritabanı Görüntüleme Sayfasında Tahmin Edilen Rakam Doğru ise Kontrol Kutusunu İşaretler ve Gerekli Butona Basarak Genel Başarı Oranını Ölçebilir. Örnek Olarak Çizilen 10 Rakam Resminden 7'si Sistem Tarafından Doğru Tahmin Edildi ise 7 Adet Kontrol Kutusu İşaretleneceğinden Dolayı Başarı Oranı %70 Olarak Hesaplanacaktır. İşlem Alanında ise Veritabanındaki Kayıtların Silinebilmesi için Buton Ekledim. Kullanıcı Ayrıca Veritabanı Görüntüleme Sayfasındaki Verileri Tahmin Alanına Göre Küçükten Büyüğe veya Büyükten Küçüğe Doğru Sıralayabilmekte ve “Bul:” Metin Kutusu Sayesinde Tahmin Alanındaki Bir Rakamı Arayabilmektedir.

Test

Python’da Projenin Dağıtılması için Kullanılan Python Embedded Package Yapısını Kullanarak Projenin Her Platformda (Windows, Linux, vb.) Yalıtılmış Olarak ve Herhangi Bir Kurulum Gerektirmeden Çalışabilmesini Sağladım. Ayrıca Python Gradio Kütüphanesinin Oluşturulan Arayüzü Genel (Public) Olarak Paylaşma Özelliği Sayesinde Kullanıcılar İnternet Üzerinden Projenin Arayüzüne Erişebilmektedir. Veritabanınına ise Sadece Yetkili Kullanıcı Erişebilmektedir.

El Yazısı Rakam Tanıma Projesinin Başarısını Ölçmek için 5 Farklı Kullanıcıya Proje Arayüzünün İnternet Linkini Göndererek 0’dan 9’a Kadar 10 Adet Rakam Çizip Sisteme Tanıtmalarını ve Sonuçları Veritabanına Kaydetmelerini İstedim. Veritabanı Görüntüleme Sayfasındaki 50 Resmi de Kontrol Ederek Doğru Tahmin Edilenlerin Kontrol Kutusunu İşaretledim ve Gerekli Butona Bastığımda Başarı Oranının %90 Olarak Hesaplandığını Gördüm. Bu Sonuç 50 Resmin 45’inin Doğru Olarak Tahmin Edildiği Anlamına Gelmektedir.

Proje Kodları ve Projeyi Çalıştırma

Proje Kodları

Projenin Çalışması için Python 3.9.6 Sürümü veya Üstü Gerekiyor.

1.  Github'daki Repoyu git clone Komutunu Kullanarak İndirin.
2.  İndirdiğiniz Proje Klasöründe CLI Açın.
3.  Pipenv Yoksa Onu Yüklemeniz Gerekir (Komut: pip install pipenv).
4.  python -m pipenv install --python 3.9.6 (Başka Bir Python Sürümü Kullanıyorsanız Buraya Onu Yazın)
5.  pipenv shell
6.  python Ana_Rutin.py

Not: Veritabanı Giriş Sayfası Giriş Bilgileri; Kullanıcı Adı: admin, Şifre: admin

Projeyi Çalıştırdıktan Sonra Proje Arayüzünü Başkaları ile Paylaşıp Onların da Arayüzü Kullanabilmesini Sağlamak için Ana_Rutin.py Dosyasında En Son Satıra Gelin ve share Parametresini True Yapın.

CLI'da Böyle Bir Bilgi Görmelisiniz:

Public URL ile Proje Arayüzünü Başkaları ile Paylaşabilirsiniz. Bu Link 72 Saat Sonra Kendiliğinden Silinecektir.

Okuduğunuz için Teşekkür Ederim.

Kaynaklar

  1. DataFlair, “Artificial Neural Networks for Machine Learning”. Web adresi: https://data-flair.training/blogs/artificial-neural-networks-for-machine-learning/
  2. Doğan, Ö., “CNN (Convolutional Neural Networks) Nedir?”, Kasım 2020. Web adresi: https://teknoloji.org/cnn-convolutional-neural-networks-nedir/
  3. DataFlair, “Convolutional Neural Networks tutorial Learn how machines interpret images”. Web adresi: https://data-flair.training/blogs/convolutional-neural-networks-tutorial/
  4. Python, “The Python Tutorial”, Ekim 2021. Web adresi: https://docs.python.org/3/tutorial/index.html
  5. PyCharm, “PyCharm Features”. Web adresi: https://www.jetbrains.com/pycharm/features/
  6. Doğan, Ö., “Keras Kütüphanesi Nedir? Derin Öğrenme Modeli Oluşturma”, Eylül 2020. Web adresi: https://teknoloji.org/keras-kutuphanesi-nedir-derin-ogrenme-modeli-olusturma/
  7. Gradio, “Demos for your ML Models”. Web adresi: https://gradio.app/
  8. SQLite, “About SQLite”. Web adresi: https://www.sqlite.org/about.html
  9. Flask, “Foreword”. Web adresi: https://flask.palletsprojects.com/en/2.0.x/foreword/
  10. Mutluer, Y., “Flask Nedir? Django ile Farkları Neler?”, Ağustos 2020. Web adresi: https://teknoloji.org/flask-nedir-django-ile-farklari-neler/
  11. Flask, “Flask-Sqlalchemy”. Web adresi: https://flask-sqlalchemy.palletsprojects.com/en/2.x/
  12. Ergin, T., “Convolutional Neural Network (ConvNet yada CNN) nedir, nasıl çalışır?”, Ekim 2018. Web adresi: https://medium.com/@tuncerergin/convolutional-neural-network-convnet-yada-cnn-nedir-nasil-calisir-97a0f5d34cad
  13. ICHI.PRO, “Convolutional Neural Network (CNN) ve Uygulaması”. Web adresi: https://ichi.pro/tr/convolutional-neural-network-cnn-ve-uygulamasi-bilmeniz-gereken-her-sey-266752320713701
  14. Ergin, T., “Keras ile Derin Öğrenme Modeli Oluşturma”, Ekim 2018. Web adresi: https://medium.com/@tuncerergin/keras-ile-derin-ogrenme-modeli-olusturma-4b4ffdc35323
  15. Budhiraja, A., “Dropout in (Deep) Machine learning”, Aralık 2016. Web adresi: https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5
  16. WIKIPEDIA ONLINE ENCYCLOPEDIA, “MNIST database”, Ağustos 2021. Web adresi: https://en.wikipedia.org/wiki/MNIST_database
  17. Dabakoglu, C., “What is Convolutional Neural Network (CNN) ? -  with Keras”, Aralık 2018. Web adresi: https://medium.com/@cdabakoglu/what-is-convolutional-neural-network-cnn-with-keras-cab447ad204c
  18. Python, “Using Python on Windows”. Web adresi: https://docs.python.org/3/using/windows.html
Daha yeni En eski

Bu İçerikleri de Beğenebilirsiniz

Yorum Gönder