Neural Network Backpropagation
Sinopsis
Contents
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
Versi Python yang digunakan
Oiya, agar kalian tahu didalam buku ini ditulis menggunakan python versi seperti 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
from scipy.linalg import inv, det, svd, logm, expm2
diganti 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
- terdiri dari 3 layer saja yaitu input, hidden, dan output
- masing-masing terdiri dari jumlah node yaitu 2 node input, 10 node hidden, dan 1 node output
- fungsi aktifasi yang digunakan dihubungkan oleh fungsi sigmoid, yaitu input ke hidden menggunakan
- 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=False
menjadi 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