Berikut ini Algoritma yang bisa digunakan untuk backpropagation

 

  1. 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 :

clip_image002

clip_image002[13]

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”

Leave a Reply

Your email address will not be published. Required fields are marked *