Berikut ini Algoritma yang bisa digunakan untuk backpropagation
- Buat File yang berisi data untuk training. (Dalam algoritma ini, tiap data terdiri atas 5 input sehingga numInput = 5, dan sebuah output target, tapi ini bisa diganti sesuai kebutuhan) Dengan format isi filenya mungkin bisa didesain seperti berikut ini :
X1:X2:X3:X4:X5=Y;
X1:X2:X3:X4:X5=Y;
โฆ. dan seterusnya sampai pola data ke n โฆ.
X1:X2:X3:X4:X5=Y;
2. Simpan File yang telah dibuat.
3. Tentukan jumlah neuron pada Hidden Layer (N = 1,2,3,4,5 โฆ dst), semakin banyak belum tentu semakin bagus. Misal anda memilih ada 3 Hidden Neuron pada Hidden Layer, maka numHidden = 3.
4. Tentukan learning rate atau tingkat pembelajaran , 0 < ฮท < 1
5. Baca isi File yang telah dibuat tadi. Konsep sederhananya dengan memecah file menjadi array berdasarkan karakter tertentu. Sebagai contoh, jika anda menggunakan format pada nomer 1, berarti anda harus memecah berdasarkan karakter โ;โ .
6. Misalkan data untuk training terdiri atas n pola data, dan masing-masing ada 5 input, maka kita dapat membuat Array X[0..n-1 , 0..4] yang berisi pola data. Kemudian Array Y[1..n-1] berisi n target output.
7. Tentukan lama pembelajaran atau iterasi t .
8. Lakukan Training (nb: HN berarti HiddenNeuron, dan ON berarti OutputNeuron )
| Lakukan Perulangan dari EPOCH = 0 sampai tLakukan Perulangan dari pola data ke 0 sampai ke n-1
Perulangan dari j = 0 sampai numHidden – 1 Sigma = 0 Perulangan dari i = 0 sampai numInput – 1 Sigma += (HN[j].Weight[i] * X[i]) Lanjutkan i HN[j].Output = aktivasi(Sigma + HN[j].Bias) Lanjutkan j Sigma = 0 Perulangan dari i = 0 sampai numHidden – 1 Sigma += (ON.Weight[i] * HN[i].Output) Lanjutkan i ON.Output = aktivasi(Sigma + ON.Bias) ON.ErrorGradient = ON.Output * (1 – ON.Output) * (Y – ON.Output) Perulangan dari j = 0 sampai numHidden – 1 HN[j].ErrorGradient = HN[j].Output * (1 – HN[j].Output) * (ON.ErrorGradient * ON.Weight[j]) Lanjutkan j Perulangan dari i = 0 sampai numHidden – 1 ON.Weight[i] += (LEARNING_RATE * ON.ErrorGradient * HN[i].Output) Lanjutkan i ON.Bias += (LEARNING_RATE * ON.ErrorGradient * 1) Perulangan dari j = 0 sampai numHidden – 1 Perulangan dari i = 0 sampai numInput – 1 HN[j].Weight[i] += (LEARNING_RATE * HN[j].ErrorGradient * X[i]) Lanjutkan i HN[j].Bias += (LEARNING_RATE * HN[j].ErrorGradient * 1) Lanjutkan j Lanjutkan ke pola data berikutnya Lanjutkan EPOCH |
9. Tampilkan data setiap neuron : bobot, error gradien, bias
10. Jika ingin melakukan training lagi, menuju ke no 7.
11. User memasukkan input X[0], X[1], X[2], X[3], X[4] untuk data kalkulasi atau uji prediksi.
12. Lakukan kalkulasi untuk uji prediksi.
| Perulangan dari j = 0 sampai numHidden – 1Sigma = 0
Perulangan dari i = 0 sampai numInput โ 1 Sigma += (HN[j].Weight[i] * X[i]) Lanjutkan i HN[j].Output = aktivasi(Sigma + HN[j].Bias) Lanjutkan j Sigma = 0 Perulangan dari i = 0 sampai numHidden – 1 Sigma += (ON.Weight[i] * HN[i].Output) Lanjutkan i ON.Output = aktivasi(Sigma + ON.Bias) |
13. Tampilkan Y, dimana Y = ON.Output
14. Jika ingin melakukan uji prediksi lagi menuju ke nomer 11
15. Exit.
Nah implementasi dari Algoritma diatas akan kita buat ke dalam class Neuron dan class JaringanSarafTiruan. Class Neuron mewakili object dari satu buah Neuron. Sementara Class JaringanSarafTiruan merupakan object yang berupa kumpulan dari object Neuron.
Apa aja sih yang dimiliki dari Object Neuron dan JaringanSarafTiruan, bisa dilihat di diagram UML berikut ini :
Nah dari diagram UML, kita bikin class nya :
|
‘*************************************************** ‘ CLASSNAME : Neuron ‘ LANGUAGE : Visual Basic .NET ‘ CREATOR : Bayu Pratama RN ‘ .NET : .NET Framework 2.0 or Later ‘*************************************************** Public Class Neuron ‘ W = bobot untuk tiap input yang masuk ke neuron, ‘ ukuran array W tergantung jumlah input yang masuk ke neuron Private W() As Double Private b As Double ‘ b = bobot untuk bias Private d As Double ‘ d = delta, Error Gradient dari neuron Private O As Double ‘ O = output dari aktivasi ‘******************************************************* ‘ Constructor untuk object Neuron ‘ defaultnya hanya punya satu input yg masuk ke neuron ‘******************************************************* Public Sub New() ReDim W(0) Randomize() W(0) = 2 * Rnd(1234) – 1 b = 2 * Rnd(1234) – 1 d = 2 * Rnd(1234) – 1 O = 0 End Sub ‘******************************************************* ‘ Overloading Constructor untuk object Neuron ‘ punya input yg masuk ke neuron sebanyak numOfWeights ‘******************************************************* Public Sub New(ByVal numOfWeights As Integer) ReDim W(numOfWeights – 1) Dim j As Integer For j = 0 To numOfWeights – 1 W(j) = 2 * Rnd(1234) – 1 Next b = 2 * Rnd(1234) – 1 d = 2 * Rnd(1234) – 1 O = 0 End Sub ‘ **************************************************** ‘ Di bawah ini merupakan property dari object Neuron ‘ **************************************************** Public Property Weight(ByVal j As Integer) As Double Get Return W(j) End Get Set(ByVal value As Double) W(j) = value End Set End Property Public Property Bias() As Double Get Return b End Get Set(ByVal value As Double) b = value End Set End Property Public Property ErrorGradient() As Double Get Return d End Get Set(ByVal value As Double) d = value End Set End Property Public Property Output() As Double Get Return O End Get Set(ByVal value As Double) O = value End Set End Property End Class |
————————————————————————-
|
‘*************************************************** ‘ CLASSNAME : JaringanSarafTiruan ‘ LANGUAGE : Visual Basic .NET ‘ CREATOR : Bayu Pratama RN [ M0507011 ] ‘ .NET : .NET Framework 2.0 or Later ‘ DEPENDENCY : Need Class Neuron.vb ‘ NOTE : It has more than one Hidden Neuron, but the Output Neuron only one ‘*************************************************** Public Class JaringanSarafTiruan Private numInput As Integer ‘ Berisi banyaknya input untuk tiap Hidden Layer Neuron Private numHidden As Integer ‘ Berisi banyaknya Hidden Layer Neuron, Output dari HiddenLayerNeuron akan menjadi Input dari OutputNeuron Private LEARNING_RATE As Double ‘ Ukuran Learning Rate dari Neuron Private HNeuron(), ONeuron As Neuron ‘********************************************************** ‘ Constructor untuk object JaringanSarafTiruan ‘********************************************************** Public Sub New(ByVal numOfInput As Integer, ByVal numOfHiddenUnit As Integer, ByVal learningRate As Double) numInput = numOfInput numHidden = numOfHiddenUnit ReDim HNeuron(numOfHiddenUnit – 1) ‘Mendeklarasikan ulang ukuran array dari HNeuron Dim j As Integer For j = 0 To numOfHiddenUnit – 1 HNeuron(j) = New Neuron(numOfInput) Next ONeuron = New Neuron(numOfHiddenUnit) LEARNING_RATE = learningRate End Sub ‘ ***************************************************************** ‘ Method ini berupa Fungsi aktivasi dengan menggunakan sigmoid ‘ ***************************************************************** Private Function aktivasi(ByVal x As Double) Return (1 / (1 + Math.Exp(-1 * x))) End Function ‘ ********************************************************************* ‘ Method ini untuk Training neuron sebanyak 1 kali EPOCH ‘ Input berupa array 1 dimensi dari 0 sampai N –> X0, X1, X2, …, Xn ‘ Y adalah target ‘ ********************************************************************* Public Sub training(ByVal X() As Double, ByVal Y As Double) Dim j, i As Integer Dim Sigma As Double ‘ Menghitung output dari Hidden Layer For j = 0 To numHidden – 1 Sigma = 0 For i = 0 To numInput – 1 Sigma += (HNeuron(j).Weight(i) * X(i)) Next HNeuron(j).Output = aktivasi(Sigma + HNeuron(j).Bias) Next ‘ Menghitung output dari Output Layer Sigma = 0 For i = 0 To numHidden – 1 Sigma += (ONeuron.Weight(i) * HNeuron(i).Output) Next ONeuron.Output = aktivasi(Sigma + ONeuron.Bias) ‘ Menghitung Error Gradient atau d untuk masing2 neuron ONeuron.ErrorGradient = ONeuron.Output * (1 – ONeuron.Output) * (Y – ONeuron.Output) For j = 0 To numHidden – 1 HNeuron(j).ErrorGradient = HNeuron(j).Output * (1 – HNeuron(j).Output) * (ONeuron.ErrorGradient * ONeuron.Weight(j)) Next ‘ Menghitung perubahan bobot atau weight training untuk Output Neuron For i = 0 To numHidden – 1 ONeuron.Weight(i) += (LEARNING_RATE * ONeuron.ErrorGradient * HNeuron(i).Output) Next ONeuron.Bias += (LEARNING_RATE * ONeuron.ErrorGradient * 1) ‘ Menghitung perubahan bobot atau weight training untuk masing2 Hidden Neuron For j = 0 To numHidden – 1 For i = 0 To numInput – 1 HNeuron(j).Weight(i) += (LEARNING_RATE * HNeuron(j).ErrorGradient * X(i)) Next HNeuron(j).Bias += (LEARNING_RATE * HNeuron(j).ErrorGradient * 1) Next End Sub ‘ ******************************************************* ‘ Setelah melakukan training, method ini digunakan ‘ untuk menghitung output dari JST ‘ ******************************************************* Public Function kalkulasi(ByVal x() As Double) As Double Dim j, i As Integer Dim Sigma As Double ‘ Menghitung output dari Hidden Layer For j = 0 To numHidden – 1 Sigma = 0 For i = 0 To numInput – 1 Sigma += (HNeuron(j).Weight(i) * x(i)) Next HNeuron(j).Output = aktivasi(Sigma + HNeuron(j).Bias) Next ‘ Menghitung output dari Output Layer Sigma = 0 For i = 0 To numHidden – 1 Sigma += (ONeuron.Weight(i) * HNeuron(i).Output) Next ONeuron.Output = aktivasi(Sigma + ONeuron.Bias) Return ONeuron.Output End Function ‘*************************************************************** ‘ Berikut ini adalah property dari Object JaringanSarafTiruan ‘ HiddenNeuron : nilai kembalian berupa object neuron index ke-X dari HiddenNeuron ‘ OutputNeuron : nilai kembalian berupa object neuron dari OutputNeuron ‘ jumlahInput : mengembalikan jumlah input untuk setiap neuron dari HiddenNeuron ‘ jumlahHiddenNeuron : mengembalikan banyaknya HiddenNeuron ‘ tingkatPembelajaran : mengembalikan besarnya Learning rate ‘*************************************************************** Public ReadOnly Property HiddenNeuron(ByVal HiddenNeuronIndex As Integer) As Neuron Get Return HNeuron(HiddenNeuronIndex) End Get End Property Public ReadOnly Property OutputNeuron() As Neuron Get Return ONeuron End Get End Property Public ReadOnly Property jumlahInput() As Integer Get Return numInput End Get End Property Public ReadOnly Property jumlahHiddenNeuron() As Integer Get Return numHidden End Get End Property Public ReadOnly Property tingkatPembelajaran() As Double Get Return LEARNING_RATE End Get End Property End Class |



5 responses to “Jaringan Saraf Tiruan dengan Visual Basic .NET”