Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yaparlar...
Yapay sinir ağlarının kullanım alanlarından biri de optik karakter tanımlama(Optical Character Recognition) işlemi. Bunun yöntemini anlatmadan önce artık YSA ile ilgili bir sorunumuz olmadığını varsayıyorum.
Bu konuda karşılaşacağımız ilk problem karakterleri YSAya nasıl göstereceğimiz. YSA sadece bit girişi ve çıkışı kabul eder. Bu sorunu çözmek için sık kullanılan matris yöntemini kullanmamız uygun olacaktır. İçinde karakterimizi çizdiğimiz resmimizi matrisin elemanları olacak olan parçalara ayırmamız lazım. Parça sayısının çok fazla önemi yok, ben 8x6 matris tercih ediyorum. Çünkü büyük karakterlerin boyları enlerinden daha uzun. Resmi parçalara ayırdıktan sonra her bir parça içerisinde tam ortada temsilci pixel diye nitelendirebileceğimiz bir pixel seçip bu pixelin değerini okuyoruz. Eğer pixel siyahsa giriş değeri 1 beyazsa giriş değeri 0 olacak. Bu işlemi tüm parçalar bitinceye kadar yapıp her bir değeri giriş dizimize atıyoruz. Böylece elimizde 48 elemanlı bir giriş dizisi oldu.
YSAyı eğitebilmek için bir de çıkış dizisi gerekiyor. Nasıl ki her karakterin giriş dizisi farklıysa, çıkış dizisi de farklı olmalı ve sadece 1-0 lardan oluşmalı. Çıkış dizisi olarak her karakterin ascii değerine karşılık gelmek üzere 8 bitlik bir dizi seçilebilir. Ya da karakter sayısı kadar çıkış elemanı içeren bir dizi de işimizi görür. Bu ikinci yöntemde belirtilmek istenen karakterin sırasındaki elemana 1, diğerlerine 0 değeri atanır. Böylece her karakter için farklı bir çıkış dizisi elde edilebilir. Üstelik YSA her bir çıkış nöronundan 0 ile 1 arasında değer döndüreceğinden, bu değeri 100 ile çarparak %lik sonuç elde edebiliriz. Böylece YSAnın çalışma yöntemini ve eğitildikçe %de meydana gelecek artışı daha iyi gözlemleyebiliriz.
Bu işlemleri tamamladıktan sonra YSAmızı binlerce kez eğitmemiz lazım. Herşey bittiğinde elimizde ezberlemiş değil öğrenmiş bir program olacak.

Yukarda ekran görüntüsü bulunan visual basic ile yazdığım örnek programda, YSAyı sadece arial fontunun tek tip harfleri ile eğittim ve elle farklı iki A harfi çizerek bunları tanımasını istedim. Program 29 harf arasından bu iki A harfini tanımayı başardı. Değişen şey %lik değer. Çizdiğim harf ile arial fontunun harfi arasındaki benzerlik ne kadar fazla ise yüzdelik değer de o kadar büyük oldu.
Görüldüğü üzere YSA öğrendiği bilgileri genelleştirir. Kendisine verilen veriler, eğitim esnasında verilen verilerden farklı olsa bile bu farklılıklara uyum sağlayabilir. Bu algoritma ile ilk karşılaştığımda "Veriyi veritabanına kaydederim, ne farkedecek?" diye sormuştum, işte cevap bu...
Yayınlanma Tarihi: Blogun eski sürümü ile yazılmış, tarih kaydı bulunmuyor...
Anahtar Kelimeler: visual, basic, optik, karakter, tanımlama, el, yazısı, yapay, sinir ağı
Yorumlar ( 19 )
Hüseyin Atasoy#10
21/11/2010, 18:47
http://www.atasoyweb.net/blog/yapay-sinir-aglari-k5s0/geri-yayilimli-yapay-sinir-agi-kutuphanesi-y101.html
tuğba#11
04/08/2011, 12:09
merhaba. Ben bir proje için matlabda ses tanıtımı üzerine çalışıyorum. ysa oluştururken örneklerin farklı ağırlıkları olduğu için sıkıntı yaşadık . acaba yardımcı olabilir misiniz ? teşekkürler...
Hüseyin Atasoy#12
05/08/2011, 18:18
Örneklerin ağırlıkları derken ne kastettiğinizi anlayamadım. Yalnız bildiğim kadarıyla direkt olarak örnekler ile tanıma yapılmaz. Önce öznitelikler çıkarılır ki bu işin en zor kısmı. Matlabte kullanılabilen hazır toolboxlar olduğunu duymuştum ama ne yazık ki matlab bilmiyorum...
Öğrenci#13
04/09/2011, 16:30
Merhaba,
Arial fontuyla eğittiğinizi söylemişssiniz. Bunu programa nasıl döktünüz. Tek tek o fontta harfleri yazıp resim formatında mı kaydettiniz?
Hüseyin Atasoy#14
04/09/2011, 18:28
Arial fontu ile tüm harfleri tek tek bilgisayara çizdirip ağı öyle eğitmiştim.
Öğrenci#15
04/09/2011, 20:30
Bilgisayara çizdirme işini nasıl yaptığınızı öğrenebilir miyim?
Hüseyin Atasoy#16
04/09/2011, 20:49
Örnek:
-------------------------------------------------
'Her harf için ayrı bir picturebox
Dim i As Integer
For i = 0 To 28
CizimAlani(i).CurrentX = 2
CizimAlani(i).CurrentY = -8
CizimAlani(i).Font = "Arial"
CizimAlani(i).FontBold = True
CizimAlani(i).FontSize = 78
CizimAlani(i).Print OgretilecekHarf(i)
Next i
Öğrenci#17
04/09/2011, 21:15
c# kullanıyorum, çizim alanı olarak nitelediğiniz şey picturebox ise yazdığınız türden verileri ve methodları yok.?
Hüseyin Atasoy#18
04/09/2011, 22:15
Evet, bu kod VB6 kodu çünkü. .net'te direkt olarak picturebox'a çizim yapılamıyor. Bir bitmap nesnesi oluşturup çizimi bu nesne üzerine yapmalı ve daha sonra bitmapi picturebox'a yerleştirmelisiniz...
Öğrenci#19
06/09/2011, 23:19
Yönlendirme için teşekkür ederim. İlgilenen olursa diye....
Bitmap image = new System.Drawing.Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(image);
g.DrawString(text, new Font("Arial", 150), Brushes.Black, 0, 0);
pictureBox1.Image = image;
Yorum/Görüş Bildir