Yapay Sinir Aglari Karakter Tanima Uygulamasi
- Sevdanur GENC

- Dec 26, 2012
- 8 min read
Bu makale iceriginde Suleyman Demirel Universitesi – Bilgisayar Muhendisligi bolumu’nun Yapay Zeka dersi icin gelistirilen Yapay Sinir Aglari uygulamasinin .Net’de C# programlama dili kullanilarak yapilmis bir ornegini paylasiyor olacagim. Yapay sinir aglari uzerinde incelemis oldugumuz formul ve bilgileri Yapay Sinir Aglari isimli makale icerisinden bilgilere ulasabilirsiniz. Bu makale ise daha cok yapay sinir aglari uzerine calisilmis bir uygulamanin kodlari bulunmaktadir.
Uygulamamizi Visual Studio'nun Windows Form Application ortamini kullanarak yapiyor olacagiz. Oncesinde her bir harfin karsiligi olan bilgileri bir veritabaninda toparlayalim.
Oncelikle SqlServer uzerinde Karakter isminde bir veritabani olusturuyor ve icerisine Karakter isminde bir Tablo olusturuyoruz.
Icerisine asagidaki gibi verileri giriyoruz.
Karakter.Sql Kaynak Kodlari ;
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'
.
') AND type in (N'U')) DROP TABLE
.
GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'
.
') AND type in (N'U')) BEGIN CREATE TABLE
.
(
(1) COLLATE Turkish_CI_AS NOT NULL,
(35) COLLATE Turkish_CI_AS NOT NULL,
(35) COLLATE Turkish_CI_AS NOT NULL ) END GO INSERT
.
(
,
,
) VALUES (N'A', N'01110100011000111111100011000110001', N'00001 ') INSERT
.
(
,
,
) VALUES (N'B', N'11110100011000111110100011000111110', N'00010 ') INSERT
.
(
,
,
) VALUES (N'C', N'01111100001000010000100001000001111', N'00011 ') INSERT
.
(
,
,
) VALUES (N'D', N'11100100101000110001100011001011100', N'00100 ') INSERT
.
(
,
,
) VALUES (N'E', N'11111100001000011110100001000011111', N'00101 ') INSERT
.
(
,
,
) VALUES (N'F', N'11111100001111110000100001000010000', N'00110 ') INSERT
.
(
,
,
) VALUES (N'G', N'01110100011000011110100011000101110', N'00111 ') INSERT
.
(
,
,
) VALUES (N'H', N'10001100011000111111100011000110001', N'01000 ') INSERT
.
(
,
,
) VALUES (N'I', N'00100001000010000100001000010000100', N'01001 ') INSERT
.
(
,
,
) VALUES (N'J', N'01110001000010000100001001010001000', N'01010 ') INSERT
.
(
,
,
) VALUES (N'K', N'10001100101010011000101001001010001', N'01011 ') INSERT
.
(
,
,
) VALUES (N'L', N'10000100001000010000100001000011111', N'01100 ') INSERT
.
(
,
,
) VALUES (N'M', N'11011101011010110001100011000110001', N'01101 ') INSERT
.
(
,
,
) VALUES (N'N', N'10001110011010110101101011001110001', N'01110 ') INSERT
.
(
,
,
) VALUES (N'O', N'01110100011000110001100011000101110', N'01111 ') INSERT
.
(
,
,
) VALUES (N'P', N'11110100011000111110100001000010000', N'10000 ') INSERT
.
(
,
,
) VALUES (N'R', N'11110100011000111110101001001010001', N'10001 ') INSERT
.
(
,
,
) VALUES (N'S', N'01110100011000001110000011000101110', N'10010 ') INSERT
.
(
,
,
) VALUES (N'T', N'11111001000010000100001000010000100', N'10011 ') INSERT
.
(
,
,
) VALUES (N'U', N'10001100011000110001100011000101110', N'10100 ') INSERT
.
(
,
,
) VALUES (N'V', N'10001100011000110001100010101000100', N'10101 ') INSERT
.
(
,
,
) VALUES (N'Y', N'10001010100010000100001000010000100', N'10110 ') INSERT
.
(
,
,
) VALUES (N'Z', N'11111000010001000100010001000011111', N'10111 ')
Form1.Cs Kaynak Kodlari ;
using System; using System.Drawing; using System.Data.SqlClient; using System.Windows.Forms; namespace YapaySinirAgi { public partial class Form1 : Form { public SqlConnection con; public SqlCommand cmd; public static System.Random rast = new System.Random(); public string[] HarfVeri = new string<23>
; public int <,>
GirisVeri=new int<23,35>
; public int <,>
CikisVeri=new int<23,5>
; public double <,>
GirisKatmanAgirlik=new double<5,35>
; public double<,>
AraKatmanY = new double<23,5>
; public double<,>
AraKatmanAgirlik = new double<5, 5>
; public double<,>
CikisY = new double<23,5>
; public double[] CikisHata = new double<5>
; public double[] AraKatmanHata = new double<5>
; public double[] GirisHata = new double<35>
; public int[] TestVeri = new int<35>
; public double[] TestAraY = new double<5>
; public double[] TestCikisY = new double<5>
; public int adim = 0,iterasyon=0; public double alfa=0.2,E; public Button[] BtnArr = new Button<35>
; public static double deger() { return rast.Next(-100, 100)/100.0; } private void Form1_Load(object sender, EventArgs e) { con = new SqlConnection(@"Data Source=SEVDANUR-PC\NANO;Initial Catalog=Karakter;Integrated Security=True"); cmd = new SqlCommand("Select KarakterAdi,KarBinary,KarCikis from Karakter", con); } public Form1() { InitializeComponent(); } private void tikla(object sender, EventArgs e) { Button buton = (Button)sender; buton.BackColor = (buton.BackColor == Color.White) ? Color.Black : Color.White; } private void button36_Click(object sender, EventArgs e) { VerileriCekme(); AgirlikDegerAtama(); listBox1.Items.Add("GirisVeri-----------------------------------------"); for (int i = 0; i < GirisVeri.GetLength(0); i++) listBox1.Items.Add(GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
+ " " + GirisVeri
); listBox1.Items.Add("Cikisveri-----------------------------------------"); for (int i = 0; i < CikisVeri.GetLength(0); i++) listBox1.Items.Add(CikisVeri
+ " " + CikisVeri
+ " " + CikisVeri
+ " " + CikisVeri
+ " " + CikisVeri
); do { adim = 0; do { listBox1.Items.Add("GirisKatmanAgirlik-----------------------------------------"); for (int i = 0; i < GirisKatmanAgirlik.GetLength(0); i++) listBox1.Items.Add(GirisKatmanAgirlik
+ " " +GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
); listBox1.Items.Add("AraKatmanAgirlik-----------------------------------------"); for (int i = 0; i < AraKatmanAgirlik.GetLength(0); i++) listBox1.Items.Add(AraKatmanAgirlik
+" "+ AraKatmanAgirlik
+" "+ AraKatmanAgirlik
+" "+ AraKatmanAgirlik
+" "+AraKatmanAgirlik
); YDegerleri(); listBox1.Items.Add("AraKatmanY-----------------------------------------"); for (int i = 0; i < AraKatmanY.GetLength(1); i++) listBox1.Items.Add(AraKatmanY
); listBox1.Items.Add("CikisY-----------------------------------------"); for (int i = 0; i < CikisY.GetLength(1); i++) listBox1.Items.Add(CikisY
); E = CikisHataMetod(); listBox1.Items.Add(" E" + E); listBox1.Items.Add(" CikisHata-----------------------------------------"); for (int i = 0; i < CikisHata.Length; i++) listBox1.Items.Add(CikisHata
); AraKatmanHataMetod(); listBox1.Items.Add(" AraKatmanHata-----------------------------------------"); for (int j = 0; j < AraKatmanHata.Length; j++) listBox1.Items.Add(AraKatmanHata
); AraKatmanYeniAgirlik(); listBox1.Items.Add("AraKatmanAgirlik-----------------------------------------"); for (int i = 0; i < AraKatmanAgirlik.GetLength(0); i++) listBox1.Items.Add(AraKatmanAgirlik
+ " " + AraKatmanAgirlik
+ " " + AraKatmanAgirlik
+ " " + AraKatmanAgirlik
+ " " + AraKatmanAgirlik
); GirisKatmanYeniAgirlik(); listBox1.Items.Add("GirisKatmanAgirlik-----------------------------------------"); for (int i = 0; i < GirisKatmanAgirlik.GetLength(0); i++) listBox1.Items.Add(GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
+ " " + GirisKatmanAgirlik
); adim++; } while (adim < 23 && E > 0.1); iterasyon++; } while (E > 0.1); } public void VerileriCekme() { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); int sayac=0; while (reader.Read()) { String a = Convert.ToString(reader["KarakterAdi"]); HarfVeri
=a; a=Convert.ToString(reader["KarBinary"]); for (int i = 0; i < GirisVeri.GetLength(1); i++) GirisVeri
= Convert.ToInt32(a.Substring(i,(1))); a = Convert.ToString(reader["KarCikis"]); for (int i = 0; i < CikisVeri.GetLength(1); i++) CikisVeri
= Convert.ToInt32(a.Substring(i, (1))); sayac++; } reader.Close(); con.Close(); } public void AgirlikDegerAtama() { for (int i = 0; i < GirisKatmanAgirlik.GetLength(0); i++) for (int j = 0; j < GirisKatmanAgirlik.GetLength(1); j++) GirisKatmanAgirlik
= deger(); for (int i = 0; i < AraKatmanAgirlik.GetLength(0); i++) for (int j = 0; j < AraKatmanAgirlik.GetLength(1); j++) AraKatmanAgirlik
= deger(); } public void YDegerleri() { for (int i = 0; i <AraKatmanY.GetLength(1); i++) { double net = 0.0; for (int j = 0; j < GirisKatmanAgirlik.GetLength(1); j++) net += (Convert.ToInt16(GirisVeri
) * GirisKatmanAgirlik
); AraKatmanY
= Math.Round((1.0 / (1.0 + Math.Round((Math.Exp(-net)),2))), 2); } for (int i = 0; i < CikisY.GetLength(1); i++) { double net = 0; for (int j = 0; j < AraKatmanAgirlik.GetLength(1); j++) net += (AraKatmanY
* AraKatmanAgirlik
); CikisY
=Math.Round((1 / (1 + Math.Exp(-Math.Round(net,2)))),2); } } public double CikisHataMetod() { double toplam = 0; int a=0; double b=0.0; for (int i = 0; i < CikisHata.Length; i++) { CikisHata
=Math.Round(( CikisY
* (1 - CikisY
) * (Convert.ToInt16(CikisVeri
) - CikisY
)),2); a=CikisVeri<0, i>
; b=CikisY
; toplam += Math.Round((Math.Pow((Convert.ToInt16(CikisVeri
) - CikisY
),2)),2); } listBox1.Items.Add( 0.5 * toplam); E=0.5 * toplam; return E; } public void AraKatmanHataMetod() { for (int j = 0; j < AraKatmanHata.Length; j++) { double toplam = 0; for (int i = 0; i <CikisHata.Length; i++) { toplam += CikisHata
* AraKatmanAgirlik
; } AraKatmanHata
=Math.Round(( AraKatmanY
* (1 - AraKatmanY
)*toplam),2); } } public void AraKatmanYeniAgirlik() { for (int i = 0; i < AraKatmanAgirlik.GetLength(0); i++) { for (int j = 0; j < AraKatmanAgirlik.GetLength(1); j++) {AraKatmanAgirlik
=Math.Round((AraKatmanAgirlik
+(alfa*CikisHata
*AraKatmanY
)),2); } } } public void GirisKatmanYeniAgirlik() { for (int i = 0; i < GirisKatmanAgirlik.GetLength(0); i++) { for (int j = 0; j < GirisKatmanAgirlik.GetLength(1); j++) { GirisKatmanAgirlik
= Math.Round((GirisKatmanAgirlik
+ (alfa * AraKatmanHata
* GirisVeri
)),2); } } } public void TestHesabi() { for (int i = 0; i < TestAraY.Length; i++) { double net = 0.0; for (int j = 0; j < GirisKatmanAgirlik.GetLength(1); j++) net += (TestVeri
* GirisKatmanAgirlik
); TestAraY
= Math.Round((1.0 / (1.0 + Math.Round((Math.Exp(-net)), 2))), 2); Console.Write(TestAraY
+" "); } for (int i = 0; i < TestCikisY.Length; i++) { double net = 0; for (int j = 0; j < AraKatmanAgirlik.GetLength(1); j++) net += (TestAraY
* AraKatmanAgirlik
); TestCikisY
= Math.Round((1 / (1 + Math.Exp(-Math.Round(net, 2)))), 2); Console.Write(TestCikisY
+ " "); } } public void Karsilastirma() { for (int i = 0; i < AraKatmanY.GetLength(0); i++) { int sayac = 0; for (int j = 0; j < AraKatmanY.GetLength(1); j++) { if (AraKatmanY
== TestAraY
) sayac++; if (CikisY
== TestCikisY
) sayac++; } listBox2.Items.Add(HarfVeri
+ "= % " + (sayac * 10)); } } private void button37_Click(object sender, EventArgs e) { TestDegerleri(); for (int i = 0; i < 35; i++) { TestVeri
= BtnArr
.BackColor == Color.Black ? 1 : 0; listBox1.Items.Add(TestVeri
); } listBox2.Items.Clear(); TestHesabi(); Karsilastirma(); } public void TestDegerleri() { BtnArr<0>
= button1; BtnArr<1>
= button2; BtnArr<2>
= button3; BtnArr<3>
= button4; BtnArr<4>
= button5; BtnArr<5>
= button6; BtnArr<6>
= button7; BtnArr<7>
= button8 BtnArr<8>
= button9; BtnArr<9>
= button10; BtnArr<10>
= button11; BtnArr<11>
= button12; BtnArr<12>
= button13; BtnArr<13>
= button14; BtnArr<14>
= button15; BtnArr<15>
= button16; BtnArr<16>
= button17; BtnArr<17>
= button18; BtnArr<18>
= button19; BtnArr<19>
= button20; BtnArr<20>
= button21; BtnArr<21>
= button22; BtnArr<22>
= button23; BtnArr<23>
= button24; BtnArr<24>
= button25; BtnArr<25>
= button26; BtnArr<26>
= button27; BtnArr<27>
= button28; BtnArr<28>
= button29; BtnArr<29>
= button30; BtnArr<30>
= button31; BtnArr<31>
= button32; BtnArr<32>
= button33; BtnArr<33>
= button34; BtnArr<34>
= button35;
}
}
}
Uygulamanin Ekran Goruntusu ;
Keyifli Calismalar Dilerim...
Comments