Sunday, May 15, 2016

Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link
Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation



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.
Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation

Versi Python  yang digunakan

Oiya, agar kalian tahu didalam buku  ini ditulis menggunakan python versi seperti berikut
Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation

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

Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation
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"

Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation


Kode 
from scipy.linalg import inv, det, svd, logm, expm2 
diganti dengan
from scipy.linalg import inv, det, svd, logm, _expm_frechet 

Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation


Dataset

Kalian bisa melihat dataset XOR berikut
Buku Belajar Machine Learning dengan Python - Neural Network Backpropagation
https://www.tutorialspoint.com/pybrain/pybrain_quick_guide.htm

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



Hasilnya kalian bisa lihat

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


    No comments:

    Post a Comment