Fungsi Jaringan Syaraf Tiruan

if tbl_nonFuzzy == training_noFuzzy sQuery = string .Formatinsert into training_+variabel1+ + karakter,_SC,_C,_S,_L,_SL,Target+ values{0},{1},{2},{3},{4},{5},{6};, karakter[c],varFuzzy[c,0],varFuzzy[c,1],varFuzzy[c,2],varFuzzy[c,3 ],varFuzzy[c,4],target[c]; else sQuery = string .Formatinsert into validasi_+variabel1+ + karakter,_SC,_C,_S,_L,_SL+ values{0},{1},{2},{3},{4},{5};, karakter[c],varFuzzy[c,0],varFuzzy[c,1],varFuzzy[c,2],varFuzzy[c,3 ],varFuzzy[c,4]; try { Cursor.Current = Cursors.WaitCursor; eksekusi data insert OleDbConnection conn = new OleDbConnectionsConn; OleDbCommand cmd = new OleDbCommandsQuery,conn; conn.Open; cmd.ExecuteNonQuery; conn.Close; Cursor.Current = Cursors.Default; } …

4.3.2.2. Fungsi Jaringan Syaraf Tiruan

Arsitektur Jaringan Syaraf Tiruan yang digunakan adalah sebagai berikut. 1. Masing-masing variabel d, i dan T mempunyai JST Propagasi balik dengan data bobot masing-masing dan keluaran masing-masing. 2. Lapisan input masing-masing variabel ada 5 unit sel berdasarkan kelas Fuzzy berturut untuk _SC, _C, _S, _L dan _SL. 3. Lapisan antara hidden layer mempunyai 3 unit sel H= I+O2. 4. Lapisan output mempunyai 1 unit sel. 5. Nilai masukan tiap sel berkisar 0 hingga 1, maka keluaran bernilai 0 hingga 1. Ini disesuaikan dengan karakterisktik fungsi sigmoid yang dipakai yakni berkisar 0 hingga 1. 6. Fungsi Sigmoid yang digunakan dalam kode sebagai berikut. private float activation_function float sum { return float 11 + Math.Exp-betasum;} Dengan nilai beta sama dengan 1 const float beta = 1.0f; 7. Laju pembelajaran eta sebesar 0.1 dan jumlah epoch yang digunakan adalah 1000 untuk tiap model data pelatihan A dan B untuk tiap pasangan karakter nya. 8. Inisialisasi bobot awal dalam fungsi random dengan nilai -1 hingga 1. 9. Bias tidak digunakan karena bersifat pilihan Freeman, 1992, p.105. Setengah dari jumlah kumulatif dari kesalahan yang dihasilkan oleh tiap pola pelatihan dinyatakan dalam variabel errore[e] dengan e menunjukkan urutan epoch. Sedangkan errrord[d] menunjukkan kesalahan dari tiap pola pelatihan dengan d menunjukkan urutan pola pelatihan. Errord[d] diperoleh dari kuadrat selisih dari nilai target pelatihan dengan error yang dihasilkan. Ini dijelaskan dalam kutipan kode sebagai berikut. errord[d] = float errord[d] + Math.Powtarget[k]- outputout[k],2; …. errord[d] = errord[d]2; errore[e] = errore[e] + errord[d]; Struktur JST yang digunakan dijelaskan dalam gambar sebagai berikut. Gambar 29 Struktur Jaringan Syaraf Tiruan untuk Variabel d, i, dan T Tiap variabel d, i dan T mempunyai bobot JST masing-masing dengan arsitektur yang berdiri sendiri. Tiap JST memberikan nilai output 0 hingga 1 sesuai dengan data pelatihan yang digunakan saat proses pembelajaran. Tiap-tiap nilai output digunakan dalam proses statistik untuk melihat keseluruhan persentase tiap nilai dalam FRR atau FAR dalam analisis data penelitian ini. Arsitektur JST yang berdiri sendiri ini dapat dicapai dengan variabel berstruktur array sederhana dua dimensi sebagai berikut. float [,] neuronIH = new float [INP,HDN]; float [,] neuronHO = new float [HDN,OUT]; NeuronIH berisi data bobot koneksi lapisan input dengan lapisan antara hidden dan NeuronHO berisi data bobot koneksi lapisan antara dengan lapisan output. Lapisan input mempunyai 5 sel, lapisan tengah mempunyai 3 sel dan lapisan output mempunyai 1 sel. Untuk perhitungan tiap variabel d, I dan T dilakukan dengan memanggil ke mbali data yang bersesuaian dari tiap tabel basis data lampiran 7 untuk disimpan ke struktur array diatas. Ini dijelaskan dalam kutipan kode sebagai berikut. string [] variabel = {d,i,T}; Variabel ini dipanggil setiap kali ada proses loop : for short v=0;vVAR;v++ { tbl_variabel = variabel[v]; … Nilai tbl_variabel tersebut diteruskan ke variabel string sQuery yang dijalankan oleh OleDbCommand cmd . Ini dijelaskan dalam kutipan kode sebagai berikut. private void load_wg_toann { Masukkan data bobot ke JST sQuery = select from bobot_+tbl_variabel+tbl_bobot; … OleDbConnection conn = new OleDbConnectionsConn; OleDbCommand cmd = new OleDbCommandsQuery,conn; conn.Open; OleDbDataReader DataDB = cmd.ExecuteReader; while DataDB.Read { for short i = 0; iINP;i++ { for short j=0; jHDN;j++ { neuronIH[i,j] = Convert.ToSingleDataDB.GetValue2+j+iHDN.ToString; } } for short j = 0; jHDN;j++ { for short k=0; kOUT;k++ { neuronHO[j,k] = Convert.ToSingleDataDB.GetValue2+INPHDN+k+jOUT.ToString; … Keseluruhan proses pelatihan JST dilakukan oleh event private voi d btntraining_Clickobject sender, System.EventArgs e sebagai berikut. ANN_init; input_toann true ; backpropagate_train; ANN_init adalah fungsi untuk melakukan inisialisasi bilangan random -1 hingga 1 ke nilai bobot sebagai nilai awal dalam kutipan kode sebagai berikut. const float R_MIN = -1.0f; const float R_MAX = 1.0f; … private void ANN_init { for short i = 0; iINP;i++ { for short j=0; jHDN;j++ { neuronIH[i,j] = R_MIN + float rand.Next10001000fR_MAX-R_MIN; } } for short j = 0; jHDN;j++ { for short k=0; kOUT;k++ { neuronHO[j,k] = R_MIN + float rand.Next10001000fR_MAX-R_MIN; … Proses membaca data input saat pelatihan ke dalam JST dilakukan oleh fungsi input_toannbool training dengan nilai training = true. Nilai training = true bertujuan untuk memberikan tanda flag bahwa tabel yang diambil adalah tabel training_ bukan tabel validasi_. Penjelasan dalam kutipan kode sebagai berikut. private void input_toann bool training { inisialisasi data training if training sQuery = select from validasi_+tbl_variabel+tbl_name; else sQuery = select from training_+tbl_variabel+tbl_name; try { Cursor.Current = Cursors.WaitCursor; eksekusi data OleDbConnection conn = new OleDbConnectionsConn; OleDbCommand cmd = new OleDbCommandsQuery,conn; short counterd = 0; conn.Open; OleDbDataReader DataDB = cmd.ExecuteReader; … while DataDB.Read { lvItem = listView1.Items.AddDataDB.GetValue0.ToString; indeksout[counterd] = int DataDB.GetValue0; lvItem.SubItems.AddDataDB.GetValue1.ToString; for short i = 0;i INP;i++ { lvItem.SubItems.AddDataDB.GetValue2+i.ToString; inputtr[counterd,i] = Convert.ToSingleDataDB.GetValue2+i.ToString; } if training { for short k = 0;k OUT;k++ lvItem.SubItems.AddDataDB.GetValueINP+2+k.ToString; targettr[counterd,k] = Convert.ToSingleDataDB.GetValueINP+2+k.ToString; } } counterd++; } DataDB.Close; conn.Close; label1.Text=counterd.ToString; … Proses pelatihan JST Propagasi balik dilakukan oleh fungsi backpropagate_train dengan proses kerja sebagai berikut. 1. Deklarasi array yang digunakan, sebagai berikut. float [] errore= new float [epoch]; float [] errord= new float [counterd]; float [] inputout = new float [INP]; float [] hiddenout = new float [HDN]; float [] hiddenerr = new float [HDN]; float [] outputout = new float [OUT]; float [] outputerr = new float [OUT]; float [] target = new float [OUT]; 2. Proses pemasukan data dilakukan untuk setiap kali pengulangan e sampai dengan jumlah epoch dan dilakukan untuk setiap kali pengulangan d sampai dengan jumlah seluruh pola pelatihan, maka dilakukan pemasukan input array ke input JST dan target array ke target JST. for int e=0; e epoch;e++ { errore[e] = 0; lblepoch.Text = e.ToString; lblepoch.Refresh; for short d=0; d counterd ;d++ { lvItem2 = listView2.Items.Addindeksout[d].ToString; errord[d] = 0; for short i=0;iINP;i++ { inputout[i] = inputtr[d,i]; } for short k=0;kOUT;k++ { target[k] = targettr[d,k]; } 3. Proses propagasi maju meliputi proses penjumlahan setiap bobot dikalikan nilai input yang bersesuaian di lapisan input dan hasilnya diberikan ke dalam fungsi aktivasi sigmoid dan diteruskan sebagai input sel pada lapisan antara. Proses seterusnya yang sama dilakukan untuk lapisan antara dengan lapisan output. for short j=0;jHDN;j++ { float sum =0; for short i=0;iINP;i++ { sum = sum + inputout[i]neuronIH[i,j]; } if bias == true sum = sum + bias_unit; hiddenout[j] = activation_functionsum; lvItem2.SubItems.Addhiddenout[j].ToString; } for short k=0;kOUT;k++ { float sum =0f; for short j=0;jHDN;j++ { sum = sum + hiddenout[j]neuronHO[j,k]; } if bias == true sum = sum + bias_unit; outputout[k] = activation_functionsum; lvItem2.SubItems.Addoutputout[k].ToString; 4. Proses penghitungan kesalahan output terhadap target dengan menggunakan turunan dari fungsi aktivasi sigmoid sebagai berikut. outputerr[k] = outputout[k]1-outputout[k]target[k]- outputout[k]; 5. Proses kumulatif menghitung kesalahan output terhadap target sebagai kesalahan keseluruhan pola sebagai berikut. errord[d] = float errord[d] + Math.Powtarget[k]- outputout[k],2; 6. Proses propagasi kesalahan balik adalah proses dengan nilai kesalahan pada proses no. 4 di-propagasi-balikkan ke lapisan antara untuk menghitung nilai kesalahan pada lapisan antara, sebagai berikut. error dari Hidden Unit for short j=0;jHDN;j++ { hiddenerr[j] = 0; for short k=0;kOUT;k++ { hiddenerr[j] = hiddenerr[j] + outputerr[k]neuronHO[j,k]; } hiddenerr[j] = hiddenerr[j]hiddenout[j]1-hiddenout[j]; … 7. Proses penyesuaian bobot di tiap unit sel lapisan antara dan lapisan output berdasarkan nilai kesalahan pada no. 4 dan no. 6 sesuai dengan laju pembelajaran eta yang telah ditetapkan sebagai berikut. Update Bobot Output Unit for short j=0;jHDN;j++ { for short k=0;kOUT;k++ { neuronHO[j,k]= neuronHO[j,k]+etaoutputerr[k]hiddenout[j]; } } Update Bobot Hidden Unit for short i=0;iINP;i++ { for short j=0;jHDN;j++ { neuronIH[i,j]= neuronIH[i,j]+etahiddenerr[j]inputout[i]; } } 8. Proses kumulatif keseluruhan kesalahan pola pelatihan dan separuh nilainya adalah kesalahan kumulatif untuk tiap perulangan epoch dalam kode sebagai berikut. errord[d] = errord[d]2; errore[e] = errore[e] + errord[d]; 9. Setelah training dilakukan sebanyak jumlah epoch, maka bobot akhir disimpan ke dalam tabel bobot_ untuk tiap pasangan karakter untuk tiap variabelnya. Penyimpanan dilakukan oleh fungsi save_weight dengan melakukan perintah insert record ke dalam tabel bobot_. Penjelasan dalam kutipan kode sebagai berikut. private void save_weight { inisialisasi data bobot sQuery = string .Formatinsert into bobot_+tbl_variabel+ karakter,WIH00,WIH01,WIH02,+ WIH10,WIH11,WIH12,+ WIH20,WIH21,WIH22,+ WIH30,WIH31,WIH32,+ WIH40,WIH41,WIH42,+ WHO00,WHO10,WHO20+ values {0},{1},{2},{3},+ {4},{5},{6},+ {7},{8},{9},+ {10},{11},{12},+ {13},{14},{15},+ {16},{17},{18};, pasangan_kar,neuronIH[0,0],neuronIH[0,1],neuronIH[0,2] , neuronIH[1,0],neuronIH[1,1],neuronIH[1,2], neuronIH[2,0],neuronIH[2,1],neuronIH[2,2], neuronIH[3,0],neuronIH[3,1],neuronIH[3,2], neuronIH[4,0],neuronIH[4,1],neuronIH[4,2], neuronHO[0,0],neuronHO[1,0],neuronHO[2,0]; ... conn.Open; cmd.ExecuteNonQuery; conn.Close; Proses verifikasi JST dilakukan oleh event private void btn_JSTstart_Clickobject sender, System.EventArgs e dalam penjelasan kode sebagai berikut. private void btn_JSTstart_Click object sender, System.EventArgs e { … tbl_bobot = string .Format where karakter = {0} and indeks = {1},pasangan_kar,textBox2.Text; … load_wg_toann; … input_toann false ; propagate_output; … Fungsi load_wg_toann melakukan pembacaan nilai bobot dari basis data ke dalam JST. Pemilihan record ditentukan oleh perintah query sQuery = select from bobot_+tbl_variabel+tbl_bobot dengan nilai tbl_variabel dan tbl_bobot berupa string yang diperoleh dari tbl_bobot = string.Format where karakter = {0} and indeks = {1},pasangan_kar,textBox2.Text . Bobot yang dipilih berasal dari pasangan karakter yang sama dan bisa dipilih berdasarkan nomor indeks jika data record bobot dari pasangan karakter lebih dari satu. Penjelasan dalam kutipan kode sebagai berikut. private void load_wg_toann { Masukkan data bobot ke JST sQuery = select from bobot_+tbl_variabel+tbl_bobot; … conn.Open; OleDbDataReader DataDB = cmd.ExecuteReader; while DataDB.Read { for short i = 0; iINP;i++ { for short j=0; jHDN;j++ { neuronIH[i,j] = Convert.ToSingleDataDB.GetValue2+j+iHDN.ToString; } } for short j = 0; jHDN;j++ { for short k=0; kOUT;k++ { neuronHO[j,k] = Convert.ToSingleDataDB.GetValue2+INPHDN+k+jOUT.ToString; … Data bobot dan data input dari tabel validasi dimasukkan ke dalam JST. Perhitungan output dilakukan oleh fungsi propagate_output dalam penjelasan kode sebagai berikut. private void propagate_output { prepare display output JST string logfile; if lbl_browser_lain.Text == { logfile= textBox1.Text+_output_+label5.Text+_+tbl_variabel+.log; } else { logfile= textBox1.Text+_output_+label5.Text+_+tbl_variabel+_val_lain.l og; } FileStream s= new FileStreamlogfile,FileMode.CreateNew; StreamWriter w = new StreamWriters; if lbl_browser_lain.Text = w.WriteLinelbl_browser_lain.Text; initListView_output; ListViewItem lvItem2 = new ListViewItem; short counterd = Convert.ToInt16label1.Text; float [] inputout = new float [INP]; float [] hiddenout = new float [HDN]; float [] outputout = new float [OUT]; for short d=0; d counterd ;d++ { lvItem2 = listView2.Items.Addindeksout[d].ToString; for short i=0;iINP;i++ { inputout[i] = inputtr[d,i]; } for short j=0;jHDN;j++ { float sum =0f; for short i=0;iINP;i++ { sum = sum + inputout[i]neuronIH[i,j]; } if bias == true sum = sum + bias_unit; hiddenout[j] = activation_functionsum; lvItem2.SubItems.Addhiddenout[j].ToString; } for short k=0;kOUT;k++ { float sum =0f; for short j=0;jHDN;j++ { sum = sum + hiddenout[j]neuronHO[j,k]; } if bias == true sum = sum + bias_unit; outputout[k] = activation_functionsum; w.WriteLined.ToString+|+k.ToString+|+outputout[k].T oString; lvItem2.SubItems.Addoutputout[k].ToString; } } w.Close; } Hasil yang diperoleh berupa file log teks yang akan digunakan dalam proses analisis data secara manual dengan menggunakan MS Excell dan Text Analysis Tool.

4.3.2.3 Uji Aplikasi Analisis Data Jaringan Syaraf Tiruan