Neural Network Backpropagation

By | January 15, 2021
Print Friendly, PDF & Email
2,222 Views

Sinopsis

Penggunaan Machine Learning  dengan algoritma neural network backpropagation yang melibatkan seperti arsitektur diatas berupa bias sangat lah berpengaruh secara signifikan terhadap proses pelatihan yaitu epoch dan hasil error yang didapat. Kalian bisa menggunakan library pybrain dalam melakukan simulasi ini, sekedar kalian tahu, neural network backpropagation sangat cocok untuk diterapkan dalam kasus nonlinear, secara sederhana kasus yang akan kita temui yaitu logika XOR. Buku ini secara teknis tidak membahas cara install dan dasar-dasar pemrograman python, tapi kalau kalian mau belajar dasar-dasarnya, bisa beli Buku Belajar Mudah Python dengan Package Opensource.

 

Kalau kalian belum paham atau ingin mengajukan pertanyaan, kirim saja email kesini, jangan lupa ya untuk Subcribe
 

Install Library

Library yang digunakan menggunakan PyBrain, kalian bisa install terlebih dahulu pybrain dalam modul python mu.

Versi Python  yang digunakan

Oiya, agar kalian tahu didalam buku  ini ditulis menggunakan python versi seperti berikut

Setelah menggunakan version Python 3.6.3, ada sedikit bugs di Pybrain yaitu  No module named ‘structure’, oleh karena itu kalian bisa lakukan install structure tersendiri ref : https://github.com/pybrain/pybrain/issues/222. dengan mengetikan perintah berikut
pip install numpy scipy structure sequential https://github.com/pybrain/pybrain/archive/0.3.3.zip

Error terjadi karena PyBrain version 0.3.1 harusnya menggunakan Python 2.7 bukan 3.6 keatas

Selain error diatas berupa No module named ‘structure’, kalian akan temui scipy yang masih menggunakan library yang lama sehingga terjadi miss kode yang lain seperti exmp2 tidak ada di scipy

from scipy.linalg import inv, det, svd, logm, expm2
ImportError: cannot import name 'expm2'

oleh karena hal tersebut kalian bisa ubah kode pybrain. ref: https://stackoverflow.com/questions/46744105/running-neural-network-pybrain yaitu file pada lokasi
C:\ProgramData\Anaconda3\lib\site-packages\pybrain\tools\functions.py

Kode

from scipy.linalg import inv, det, svd, logm, expm2diganti dengan

from scipy.linalg import inv, det, svd, logm, _expm_frechet 

Dataset

Kalian bisa melihat dataset XOR berikut

Model Neural Network Backpropagation

Desain/model NN backpropagation untuk kasus logika XOR diatas yaitu

  1. terdiri dari 3 layer saja yaitu input, hidden, dan output
  2. masing-masing terdiri dari jumlah node yaitu 2 node input, 10 node hidden, dan 1 node output
  3. fungsi aktifasi yang digunakan dihubungkan oleh fungsi sigmoid, yaitu input ke hidden menggunakan
  4. juga ditambahkan bias terhadap layer hidden dan output

Kode Lengkap Pelatihan dan Pengujian

# -*- coding: utf-8 -*-
"""
Created on Sat May 14 09:22:52 2016

@author: mulkan
"""


from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import SigmoidLayer
from pybrain.structure.networks import FeedForwardNetwork
from pybrain.structure.connections import FullConnection
from pybrain.structure.modules import BiasUnit
from pybrain.tools.customxml import NetworkWriter
from pybrain.tools.customxml import NetworkReader
import numpy as np
#untuk menampilkan informasi bobot dan bias
def get_information(n):
    for mod in n.modules:
        for conn in n.connections[mod]:
            print (conn)
            for cc in range(len(conn.params)):
                print (conn.whichBuffers(cc), conn.params[cc])
                

#desain input dan output jaringan
#yaitu terdiri dari 3 layer input; hidden; output
node_input = 2
node_output = 1
node_hidden = 10
data_input = np.array([ [0., 0.],
                        [0., 1.],
                        [1., 0.],
                        [1., 1.],
                        ])
data_target = np.array([[0.],
                        [1.],
                        [1.],
                        [0.]
                        ])
#model input dan output
dataset = SupervisedDataSet(node_input,node_output)
dataset.setField('input',data_input)
dataset.setField('target',data_target)

#model neural network
model_neural = FeedForwardNetwork()

#desain jenis fungsi aktifasi yang digunakan
bobot_input = SigmoidLayer(node_input,name='layer input')
bobot_hidden = SigmoidLayer(node_hidden,name='layer hidden')
bobot_output = SigmoidLayer(node_output,name='layer output')

#tambahkan bias kedalam masing-masing layer
#bias hanya melekat pada hidden dan output
bias_hidden = BiasUnit(name='bias untuk hidden')
bias_output = BiasUnit(name='bias untuk output')


#tambahkan informasi fungsi aktivasi
model_neural.addOutputModule(bobot_output)
model_neural.addInputModule(bobot_input)
model_neural.addModule(bobot_hidden)

#tambahkan informasi bias
model_neural.addModule(bias_hidden)
model_neural.addModule(bias_output)

#tambahkan koneksi
#dengan urutan input -> hidden -> output
model_neural.addConnection(FullConnection(bobot_input, bobot_hidden))
model_neural.addConnection(FullConnection(bobot_hidden, bobot_output))

model_neural.addConnection(FullConnection(bias_hidden,bobot_hidden))
model_neural.addConnection(FullConnection(bias_output,bobot_output))

#pembuatan model sudah selesai
model_neural.sortModules()
#bisa kalian cetak modelnya
print('Model Neural Network')
print(model_neural)

#kalian bisa melihat hasil sebelum training hasilnya prediksinya
print('Prediksi output sebelum pelatihan')
print (model_neural.activate([0, 0]))
print (model_neural.activate([0, 1]))
print (model_neural.activate([1, 0]))
print (model_neural.activate([1, 1]))

#sesi pelatihan
tampilkan_error_periterasi=False
run_training = BackpropTrainer(model_neural, learningrate = 0.01, momentum = 0.99, verbose = tampilkan_error_periterasi)
epoch = 5000
print('Setiap epoch terjadi penurunan nilai error')
run_training.trainOnDataset(dataset, epoch)
print ('jumlah epoch',run_training.epoch)
print('Prediksi output SETELAH pelatihan')
print (model_neural.activate([0, 0]))
print (model_neural.activate([0, 1]))
print (model_neural.activate([1, 0]))
print (model_neural.activate([1, 1]))

#untuk menampilkan bobot dan bias, gunakan function
print('Informasi Bobot dan Bias')
get_information(model_neural)
#kalian bisa menyimpan informasi bobot dan bias
#kedalam sebuah file xml
NetworkWriter.writeToFile(model_neural, 'model neural network.xml')

#tapi ada sedikit masalah ketika kalian akan loading kembali
#menggunakan format xml berikut
#yaitu attribut error:
#AttributeError: 'NoneType' object has no attribute 'name'
#NetworkReader.readFrom('model neural network.xml')

#sebaiknya kalian simpan saja menggunakan pickle

hasil

Model Neural Network
FeedForwardNetwork-495
   Modules:
    [<BiasUnit 'bias untuk hidden'>, <BiasUnit 'bias untuk output'>, <SigmoidLayer 'layer input'>, <SigmoidLayer 'layer hidden'>, <SigmoidLayer 'layer output'>]
   Connections:
    [<FullConnection 'FullConnection-491': 'bias untuk output' -> 'layer output'>, <FullConnection 'FullConnection-492': 'layer hidden' -> 'layer output'>, <FullConnection 'FullConnection-493': 'layer input' -> 'layer hidden'>, <FullConnection 'FullConnection-494': 'bias untuk hidden' -> 'layer hidden'>]

Prediksi output sebelum pelatihan
[0.57068732]
[0.49185737]
[0.56378008]
[0.48638368]
Setiap epoch terjadi penurunan nilai error
jumlah epoch 5000
Prediksi output SETELAH pelatihan
[0.03417849]
[0.96307922]
[0.96658535]
[0.03414559]

Selain hal tersebut kalian bisa melihat model NN nya

Informasi Bobot dan Bias
<FullConnection 'FullConnection-491': 'bias untuk output' -> 'layer output'>
(0, 0) 6.790347843157386
<FullConnection 'FullConnection-492': 'layer hidden' -> 'layer output'>
(0, 0) 3.497900495711989
(1, 0) 4.741671481188444
(2, 0) -0.18064232685514803
(3, 0) 2.096012725600606
(4, 0) 2.4460474576833624
(5, 0) 4.083922822475887
(6, 0) -10.666016027963302
(7, 0) -2.751923961849272
(8, 0) 6.549870156435642
(9, 0) -15.123514383360192
<FullConnection 'FullConnection-493': 'layer input' -> 'layer hidden'>
(0, 0) 0.2538006259518801
(1, 0) 1.0740408467626714
(0, 1) -2.4154830644402248
(1, 1) 2.566521693237542
(0, 2) 1.079234644030871
(1, 2) 0.6624074839115575
(0, 3) 0.23706271490410374
(1, 3) 0.9023114690688949
(0, 4) 0.5446635007761353
(1, 4) 0.8119927621147566
(0, 5) 0.11542122241568567
(1, 5) 1.452486008449533
(0, 6) 10.60428713483387
(1, 6) -9.621193551276093
(0, 7) 3.5984423577505646
(1, 7) -3.7044275796906487
(0, 8) -3.402579698040977
(1, 8) 3.3106294029948233
(0, 9) -15.033214627804771
(1, 9) 15.45459867458814
<FullConnection 'FullConnection-494': 'bias untuk hidden' -> 'layer hidden'>
(0, 0) 1.2685180689454965
(0, 1) -0.4204954496694965
(0, 2) -2.8957081895975407
(0, 3) 0.09961201783646283
(0, 4) 0.8906856695529713
(0, 5) 1.3383965281494368
(0, 6) 1.008557642285942
(0, 7) 0.9116073898691818
(0, 8) -0.7032351695178224
(0, 9) 2.0071785167052547

Agar terlihat nilai penurunan error, bisa kalian set kode dengan mengubah

tampilkan_error_periterasi=Falsemenjadi True  tampilkan_error_periterasi=True

Sehingga akan tampak bahwa error akan terus menurun

Total error:  0.128989602386
Total error:  0.126523702868
Total error:  0.126609399334
Total error:  0.127402254527
Total error:  0.12792875383
Total error:  0.128458700008
Total error:  0.128381778527
Total error:  0.127076513432
Total error:  0.126870178208
Total error:  0.1277920465
Total error:  0.125625866634
Total error:  0.125449468313
Total error:  0.125914975572
Total error:  0.127317550116
Total error:  0.125493589243

Kalian bisa fokuskan pada hasil berikut

Prediksi output sebelum pelatihan
[0.57068732]
[0.49185737]
[0.56378008]
[0.48638368]
Setiap epoch terjadi penurunan nilai error
jumlah epoch 5000
Prediksi output SETELAH pelatihan
[0.03417849]
[0.96307922]
[0.96658535]
[0.03414559]

bahwa hasil nya akan mendekat output, dengan cara pembulatan

Prediksi output SETELAH pelatihan
[0.03417849]  --> dibulatkan 0
[0.96307922]  --> dibulatkan 1 
[0.96658535]  --> dibulatkan 1
[0.03414559]  --> dibulatkan 0

 

Leave a Reply