09e0067
TRANSCRIPT
PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN
ALGORITMA HOPFIELD
SKRIPSI
ZULKARNAIN HARUN
NIM : 041421008
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
2008
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN ALGORITMA
HOPFIELD
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Sains
ZULKARNAIN HARUN
041421008
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
2008
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
i
ABSTRAK
Kajian tentang pengenalan pola telah banyak digunakan dalam pencarian kata-kata
maupun angka dalam dokumen dengan jumlah volume yang besar, kemudian
penyortiran secara otomatis surat-surat pos, serta kemudahan dalam pengeditan
dokumen-dokumen yang telah dicetak. Pada skripsi ini dibahas pengenalan pola angka
dengan menggunakan algoritma Hopfield, mengenai algoritma serta implementasinya
ke dalam program komputer. Hasil pengenalan ditampilkan dalam bentuk java applet.
Dari proses pengenalan diperoleh bahwa algoritma Hopfield dapat mengenali pola
angka dari 0 sampai 9, namun setelah diuji dengan pola yang memiliki bentuk hampir
sama, diperoleh hasil pengenalan yang belum konsisten.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
ii
NUMERIC PATTERN RECOGNITION USING HOPFIELD ALGORITHM
ABSTRACT
Studies of pattern recognition have been used abilities such as searching for words or
numbers in large volumes of documents, then automatic posting of postal mail, and
convenient editing of previously printed documents. This paper discusses numeric
pattern recognition using Hopfield algorithm, about the algorithm and its
implementation in computer program. Results of recognition are shown with java
applet. Result of recognition shows that Hopfield algorithm can recognize numeric
pattern from 0 to 9, but after testing patterns with almost identical shape, there were
inconsistency in recognitions.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
iii
DAFTAR ISI
Hal
ABSTRAK i
DAFTAR ISI iii
DAFTAR GAMBAR v
DAFTAR TABEL vii
BAB I Pendahuluan
1.1 Latar Belakang 1
1.2 Rumusan Masalah 3
1.3 Batasan Masalah 3
1.4 Tujuan Penelitian 3
1.5 Kontribusi Penelitian 3
1.6 Metode Penelitian 4
1.7 Tinjauan Pustaka 4
BAB II Landasan Teori
2.1 Pengertian Umum Jaringan Syaraf Tiruan 5
2.1.1 Sejarah Jaringan Syaraf Tiruan 6
2.1.2 Konsep Dasar Jaringan Syaraf Tiruan 6
2.1.3 Definisi Jaringan Syaraf Tiruan 8
2.1.4 Karakteristik Jaringan Syaraf Tiruan 10
2.1.5 Kelebihan Jaringan Syaraf Tiruan 10
2.2 Model Neuron 12
2.2.1 Single-Layer Neural Network 13
2.2.2 Multilayer Perceptron Neural Network 14
2.2.3 Recurrent Neural Network 15
2.3 Proses Pembelajaran pada Jaringan Syaraf Tiruan 15
2.3.1 Supervised Learning 16
2.3.2 Unsupervised Learning 16
2.4 Model Jaringan Hopfield 16
2.5.1 Input (Masukan) 17
2.5.2 Proses Pembelajaran 19
2.5.3 Proses Perhitungan Saat Pembelajaran 20
2.5.4 Output (Keluaran) 20
2.6 Algoritma Hopfield 20
2.7 Flowchart Algoritma Hopfield 26
BAB III Analisis dan Perancangan Aplikasi
3.1 Analisis Kebutuhan 27
3.2 Aplikasi Algoritma Hopfield 28
3.3 Kondisi Konvergen 31
3.4 Rancangan Tampilan 31
3.5 Rancangan Masukan dan Keluaran 32
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
iv
3.5.1 Rancangan Masukan 32
3.5.2 Rancangan Keluaran 33
3.6 Analisis Kebutuhan Perangkat Keras 33
BAB IV Pembahasan
4.1 Perangkat Lunak 34
4.2 Struktur Data 35
4.3 Pengenalan Pola dengan Matlab 36
4.4 Aplikasi Algoritma ke dalam Program Java 38
BAB V Kesimpulan dan Saran
4.1 Kesimpulan 50
4.2 Saran 50
DAFTAR PUSTAKA 51
LAMPIRAN
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
v
DAFTAR GAMBAR
Hal
Gambar 1. Bentuk dasar neuron jaringan syaraf 5
Gambar 2. Arsitektur dasar Jaringan Syaraf Tiruan 13
Gambar 3. Single Layer Neural Network 13
Gambar 4. Multilayer Perceptron Neural Network 14
Gambar 5. Recurrent Neural Network 15
Gambar 6. Sekumpulan titik membentuk pola x pada bidang gambar 18
Gambar 7. Flowchart Algoritma Hopfield 26
Gambar 8. Struktur Jaringan Hopfield 26
Gambar 9. Rancangan Tampilan Program Applet Pada Browser 32
Gambar 10. Pola aplikasi algoritma Hopfield untuk mengenali pola pada Matlab 36
Gambar 11. Pola angka 3 yang diacak 36
Gambar 12. Pola angka pada iterasi ke-10 37
Gambar 13. Pola angka pada iterasi ke-30 37
Gambar 14. Pola angka pada iterasi ke-45 38
Gambar 15. Contoh pola angka satu pada bidang gambar yang akan dipelajari
komputer 38
Gambar 16. Pola angka 1 yang akan dikenali komputer 39
Gambar 17. Pola angka 0 43
Gambar 18. Pola angka 1 43
Gambar 19. Pola angka 2 43
Gambar 20. Pola angka 3 44
Gambar 21. Pola angka 4 44
Gambar 22. Pola angka 5 44
Gambar 23. Pola angka 6 45
Gambar 24. Pola angka 7 45
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
vi
Gambar 25. Pola angka 8 45
Gambar 26. Pola angka 9 46
Gambar 27. Pola angka yang telah diacak 46
Gambar 28. Pola yang telah dikenali oleh program 47
Gambar 29. Pola angka 0 yang diacak mendekati bentuk angka 8 47
Gambar 30. Pola yang dikenali sebagai angka 8 48
Gambar 31. Pola angka 1 yang telah diacak 48
Gambar 32. Pola angka acak yang dikenali sebagai angka 1 49
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
vii
DAFTAR TABEL
TABEL JUDUL HAL
1 Koneksi pada jaringan syaraf Hopfield 23
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
1
BAB 1
PENDAHULUAN
1.1 Latar Belakang
Artificial Intelligence (Kecerdasan Buatan) adalah salah satu bidang dalam ilmu
komputer yang membuat agar mesin (komputer) dapat mengerjakan hal-hal menuntut
kecerdasan. Penelitian mengenai Kecerdasan Buatan adalah suatu usaha untuk
menemukan dan menjabarkan aspek-aspek dari kecerdasan manusia yang dapat
disimulasikan oleh mesin. Sebagai contoh, pada saat ini terdapat mesin-mesin yang
dapat melakukan hal-hal sebagai berikut:
1. Memainkan permainan yang membutuhkan strategi (seperti permainan catur,
kartu) dan belajar untuk bermain lebih baik dari lawannya (dalam hal ini
manusia).
2. Belajar untuk mengenali pola-pola visual atau suara.
3. Menemukan bukti-bukti untuk teorema matematika.
4. Menyelesaikan beragam bentuk permasalahan yang diformulasikan
sedemikian rupa.
5. Memroses informasi-informasi yang diekspresikan dalam bahasa manusia.
Kemampuan mesin dalam melakukan hal-hal independen semacam ini seperti
manusia masih terbatas; mesin-mesin menunjukkan perilaku hanya dengan tingkat
kecerdasan mendasar. Namun demikian, ada kemungkinan-kemungkinan bahwa
mesin dapat dikembangkan untuk menunjukkan kecerdasan yang sebanding dengan
manusia, atau bahkan melebihi manusia (Jackson, Philip C., 1949).
Dengan kata lain, penelitian Kecerdasan Buatan dapat dilihat sebagai suatu
usaha mengembangkan teori matematis untuk menjabarkan kemampuan-kemampuan
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2
dan tindakan-tindakan (baik yang natural atau buatan manusia) yang menunjukkan
suatu kecerdasan.
Salah satu pengembangan lebih lanjut dari Kecerdasan Buatan adalah Artificial
Neural Network (Jaringan Syaraf Tiruan disingkat JST). Jaringan Syaraf Tiruan
adalah salah satu representasi buatan dari otak manusia yang selalu mencoba untuk
mensimulasikan proses pembelajaran pada otak manusia tersebut. Istilah buatan
digunakan karena jaringan syaraf ini diimplementasikan dengan menggunakan
program komputer yang mampu menyelesaikan sejumlah proses perhitungan selama
proses pembelajaran.
Ada beberapa tipe jaringan syaraf, namun hampir semuanya memiliki
komponen-komponen yang sama. Seperti otak manusia, jaringan syaraf juga terdiri
dari beberapa neuron yang saling terhubung. Neuron-neuron tersebut akan
mentransformasikan informasi yang diterima melalui sambungan keluarnya menuju
neuron-neuron yang lain. Pada jaringan syaraf hubungan ini dikenal dengan nama
bobot. Informasi yang diterima, disimpan pada suatu nilai tertentu pada bobot tersebut
(Kusumadewi, 2003).
Model Jaringan Neural ditunjukkan dengan kemampuannya dalam emulasi,
analisa, prediksi, dan asosiasi. Berdasarkan kemampuan yang dimiliki, Artificial
Neural Network dapat digunakan untuk belajar dan menghasilkan aturan, atau operasi
dari beberapa contoh, untuk menghasilkan output yang diinginkan dari contoh input
yang dimasukkan, dan membuat prediksi tentang kemungkinan output yang akan
muncul atau menyimpan karakteristik dari input yang disimpan.
Komputerisasi Artificial Neural Network dapat dilakukan dengan
menggunakan berbagai algoritma yang akan diterjemahkan ke kode program
kemudian di compile menggunakan compiler dan selanjutnya diterjemahkan ke bahasa
instruksi mesin. Penggunaan algoritma untuk menyelesaikan proses komputerisasi
suatu permasalahan akan sangat membantu.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
3
1.2 Rumusan Masalah
Permasalahan dalam tulisan ini adalah bagaimana komputer dapat mengenali serta
membandingkan pola angka dalam bentuk grafis yang telah diinput, dengan
menggunakan algoritma Hopfield.
1.3 Batasan Masalah
Dalam penelitian ini penulis membuat batasan lingkup tentang bagaimana algoritma
tersebut diimplementasikan untuk mengenali pola angka.
Batasan implementasi algoritma Hopfield sebagai berikut:
1. Penggambaran pola angka menggunakan tetikus.
2. Output yang diperoleh ditampilkan dengan Matlab dan Java Applet.
3. Program dibuat dengan bahasa Java.
1.4 Tujuan Penelitian
Tujuan dari penulisan tugas akhir ini adalah bagaimana algoritma Hopfield dapat
mengenali pola angka dan bagaimana komputer dapat belajar mengenal dan
membandingkan pola angka.
1.5 Kontribusi Penelitian
Dengan mengimplementasikan algoritma Hopfield dalam Artificial Neural Network
untuk pengenalan pola angka dapat bermanfaat dalam pengembangan Artificial
Neural Network lebih lanjut dengan penerapan komputerisasi dalam bidang simulasi
pengenalan lainnya.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
4
1.6 Metode Penelitian
Adapun metode penelitian yang penulis gunakan adalah sebagai berikut:
1. Studi pustaka tentang algoritma Hopfield.
2. Menganalisa Algoritma Hopfield dalam pengenalan pola angka.
3. Mengimplementasikan algoritma Hopfield dalam program komputer.
4. Mengambil kesimpulan dari hasil yang diperoleh.
1.7 Tinjauan Pustaka
Sri Kusumadewi dalam bukunya Artificial Intelligence (Teknik dan Aplikasinya),
menjelaskan tentang berbagai macam tipe jaringan syaraf tiruan serta aplikasinya yang
diantaranya adalah pengenalan pola.
Dan Morris dalam artikelnya pada http://techhouse.brown.edu/dmorris/JOHN/
StinterNet.html membahas tentang pengenalan pola dengan menggabungkan beberapa
algoritma jaringan syaraf tiruan serta menampilkannya ke dalam java applet. Dan
Morris juga membahas beberapa kekurangan pada algoritma jaringan syaraf tiruan
yang ada sekarang ini.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
5
BAB 2
LANDASAN TEORI
2.1. Pengertian Umum Jaringan Syaraf Tiruan
Jaringan Syaraf Tiruan (JST) adalah suatu jaringan dari sekelompok unit pemroses
yang melakukan pendistribusian secara besar-besaran dan dimodelkan berdasarkan
jaringan syaraf manusia, yang memiliki kecenderungan alami untuk menyimpan suatu
pengenalan yang pernah dialaminya. Dengan kata lain JST memiliki kemampuan
untuk dapat melakukan pembelajaran dan pendeteksian terhadap sesuatu pola.
Secara mendasar, sistem pembelajaran merupakan proses penambahan
pengetahuan pada JST yang sifatnya kontinu sehingga pada saat digunakan
pengetahuan tersebut akan dieksploitasi secara maksimal dalam mengenali suatu pola.
Neuron adalah bagian dasar dari pemrosesan suatu jaringan syaraf. Di bawah ini
merupakan bentuk dasar dari suatu neuron[1].
Gambar 1. Bentuk dasar neuron jaringan syaraf
Output
Input
dari
neuron-
neuron
yang
lain
Output
dari
neuron-
neuron
yang
lain
Weight Weight
Fungsi aktivasi
Processing Unit
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
6
1. Input merupakan masukan yang digunakan baik saat pembelajaran maupun
dalam mengenali suatu pola.
2. Weight, beban yang selalu berubah setiap kali diberikan input sebagai proses
pembelajaran.
3. Processing Unit merupakan tempat berlangsungnya proses pengenalan suatu
pola berdasarkan pembebanan yang diberikan.
4. Output, keluaran dari hasil pengenalan suatu pola.
2.1.1 Sejarah Jaringan Syaraf Tiruan
Saat ini bidang kecerdasan buatan dalam usahanya menirukan intelegensi manusia,
belum mengadakan pendekatan dalam bentuk fisiknya melainkan dari sisi yang lain.
Pertama-tama diadakan studi mengenai teori dasar mekanisme proses terjadinya
intelegensi. Bidang ini disebut „Cognitive Science‟. Dari teori dasar ini dibuatlah suatu
model untuk disimulasikan pada komputer, dan dalam perkembangannya yang lebih
lanjut dikenal berbagai sistem kecerdasan buatan yang salah satunya adalah jaringan
syaraf tiruan. Dibandingkan dengan bidang ilmu yang lain, jaringan syaraf tiruan
relatif masih baru. Sejumlah literatur menganggap bahwa konsep jaringan syaraf
tiruan bermula pada makalah Waffen McCulloch dan Walter Pitts pada tahun 1943.
Dalam makalah tersebut mereka mencoba untuk memformulasikan model matematis
sel-sel otak. Metode yang dikembangkan berdasarkan sistem syaraf biologi ini,
merupakan suatu langkah maju dalam industri komputer.[ Hermawan, Arief, 2006]
2.1.2 Konsep Dasar Jaringan Syaraf Tiruan
Tidak ada otak manusia yang sama antara satu dengan lainnya. Ada perbedaan dalam
ketajaman, ukuran dan pengorganisasiannya. Salah satu cara untuk memahami cara
otak bekerja adalah dengan mengumpulkan informasi dari sebanyak mungkin scan
otak manusia dan memetakannya. Hal tersebut merupakan upaya untuk menemukan
cara kerja rata-rata otak manusia itu. Peta otak manusia diharapkan dapat menjelaskan
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
7
misteri mengenai cara otak mengendalikan setiap tindak-tanduk manusia, mulai dari
penggunaan bahasa hingga gerakan.
Walaupun demikian kepastian cara kerja otak manusia masih merupakan suatu
misteri. Meski beberapa aspek dari prosesor yang menakjubkan ini telah diketahui
tetapi itu tidaklah banyak. Beberapa aspek-aspek tersebut, yaitu:
a. Tiap bagian pada otak manusia memiliki alamat, dalam bentuk formula kimia, dan
sistem syaraf manusia berusaha untuk mendapatkan alamat yang cocok untuk setiap
akson (syaraf penghubung) yang dibentuk.
b. Melalui pembelajaran, pengalaman dan interaksi antara sistem struktur dari otak itu
sendiri akan mengatur fungsi-fungsi dari setiap bagiannya.
c. Akson-akson pada daerah yang berdekatan akan berkembang dan mempunyai
bentuk fisik mirip, sehingga terkelompok dengan arsitektur tertentu pada otak.
d. Akson berdasarkan arsitekturnya bertumbuh dalam urutan waktu, dan terhubung
pada struktur otak yang berkembang dengan urutan waktu yang sama.
Berdasarkan ke empat aspek tersebut di atas dapat ditarik suatu kesimpulan
bahwa otak tidak seluruhnya terbentuk oleh proses genetis. Terdapat proses lain yang
ikut membentuk fungsi dari bagian-bagian otak, yang pada akhirnya menentukan
suatu informasi diproses oleh otak.
Elemen yang paling mendasar dari jaringan syaraf adalah sel syaraf. Sel-sel
syaraf inilah membentuk bagian kesadaran manusia yang meliputi beberapa
kemampuan umum. Pada dasarnya sel syaraf biologi menerima masukan dari sumber
yang lain dan mengkombinasikannya dengan beberapa cara, melaksanakan suatu
operasi yang non-linear untuk mendapatkan hasil dan kemudian mengeluarkan hasil
akhir tersebut.
Dalam tubuh manusia terdapat banyak variasi tipe dasar sel syaraf, sehingga
proses berpikir manusia menjadi sulit untuk direplikasi secara elektrik. Sekalipun
demikian, semua sel syaraf alami mempunyai empat komponen dasar yang sama.
Keempat komponen dasar ini diketahui berdasarkan nama biologinya yaitu, dendrit,
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
8
soma, akson, dan sinapsis. Dendrit merupakan suatu perluasan dari soma yang
menyerupai rambut dan bertindak sebagai saluran masukan. Saluran masukan ini
menerima masukan dari sel syaraf lainnya melalui sinapsis. Soma dalam hal ini
kemudian memproses nilai masukan menjadi sebuah output yang kemudian dikirim ke
sel syaraf lainnya melalui akson dan sinapsis.
Penelitian terbaru memberikan bukti lebih lanjut bahwa sel syaraf biologi mempunyai
struktur yang lebih kompleks dan lebih canggih daripada sel syaraf buatan yang
kemudian dibentuk menjadi jaringan syaraf buatan yang ada sekarang ini. Ilmu biologi
menyediakan suatu pemahaman yang lebih baik tentang sel syaraf sehingga
memberikan keuntungan kepada para perancang jaringan untuk dapat terus
meningkatkan sistem jaringan syaraf buatan yang ada berdasarkan pada pemahaman
terhadap otak biologi.
Sel syaraf-sel syaraf ini terhubung satu dengan yang lainnya melalui sinapsis. Sel
syaraf dapat menerima rangsangan berupa sinyal elektrokimiawi dari sel syaraf-sel
syaraf yang lain. Berdasarkan rangsangan tersebut, sel syaraf akan mengirimkan
sinyal atau tidak berdasarkan kondisi tertentu. Konsep dasar semacam inilah yang
ingin dicoba para ahli dalam menciptakan sel tiruan.[ Kristanto, Andri, 2004]
2.1.3 Defenisi Jaringan Syaraf Tiruan
Suatu jaringan syaraf tiruan memproses sejumlah besar informasi secara paralel dan
terdistribusi, hal ini terinspirasi oleh model kerja otak biologis. Beberapa definisi
tentang jaringan syaraf tiruan adalah sebagai berikut di bawah ini.
Hecht-Nielsend (1988) mendefinisikan sistem syaraf buatan sebagai berikut:
"Suatu neural network (NN), adalah suatu struktur pemroses informasi yang
terdistribusi dan bekerja secara paralel, yang terdiri atas elemen pemroses (yang
memiliki memori lokal dan beroperasi dengan informasi lokal) yang diinterkoneksi
bersama dengan alur sinyal searah yang disebut koneksi. Setiap elemen pemroses
memiliki koneksi keluaran tunggal yang bercabang (fan out) ke sejumlah koneksi
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
9
kolateral yang diinginkan (setiap koneksi membawa sinyal yang sama dari keluaran
elemen pemroses tersebut). Keluaran dari elemen pemroses tersebut dapat merupakan
sebarang jenis persamaan matematis yang diinginkan. Seluruh proses yang
berlangsung pada setiap elemen pemroses harus benar-benar dilakukan secara lokal,
yaitu keluaran hanya bergantung pada nilai masukan pada saat itu yang diperoleh
melalui koneksi dan nilai yang tersimpan dalam memori lokal".
Menurut Haykin, S. (1994), Neural Networks: A Comprehensive Foundation, NY,
Macmillan, mendefinisikan jaringan syaraf sebagai berikut:
“Sebuah jaringan syaraf adalah sebuah prosesor yang terdistribusi paralel dan
mempuyai kecenderungan untuk menyimpan pengetahuan yang didapatkannya dari
pengalaman dan membuatnya tetap tersedia untuk digunakan. Hal ini menyerupai
kerja otak dalam 2 (dua) hal yaitu: 1. Pengetahuan diperoleh oleh jaringan melalui
suatu proses belajar. 2. Kekuatan hubungan antar sel syaraf yang dikenal dengan
bobot sinapsis digunakan untuk menyimpan pengetahuan.
Menurut Zurada, J.M. (1992), Introduction To Artificial Neural Systems, Boston:
PWS Publishing Company, mendefinisikan sebagai berikut:
“Sistem syaraf tiruan atau jaringan syaraf tiruan adalah sistem selular fisik yang dapat
memperoleh, menyimpan dan menggunakan pengetahuan yang didapatkan dari
pengalaman”.
DARPA Neural Network Study (1988, AFCEA International Press, p. 60)
mendefinisikan jaringan syaraf buatan sebagai berikut:
Sebuah jaringan syaraf adalah sebuah sistem yang dibentuk dari sejumlah elemen
pemroses sederhana yang bekerja secara paralel di mana fungsinya ditentukan oleh
struktur jaringan, kekuatan hubungan, dan pengolahan dilakukan pada komputasi
elemen atau node.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
10
2.1.4 Karakteristik Jaringan Syaraf Tiruan
Jaringan syaraf tiruan di defenisikan sebagai sistem pemrosesan informasi yang
mempunyai karakteristik menyerupai jaringan syaraf manusia. Jaringan syaraf tiruan
tercipta sebagai suatu generalisasi model matematis dari pemahaman manusia (human
cognition) yang didasarkan atas asumsi sebagai berikut:
1. Pemrosesan informasi terjadi pada elemen sederhana yang disebut neuron.
2. Isyarat mengalir di antara sel syaraf (neuron) melalui suatu sambungan
penghubung.
3. Setiap sambungan penghubung memiliki bobot yang bersesuaian. Bobot
ini akan digunakan untuk menggandakan/mengalikan isyarat yang dikirim
melaluinya.
4. Setiap sel syaraf akan menerapkan fungsi aktivasi terhadap isyarat hasil
penjumlahan berbobot yang masuk kepadanya untuk menentukan isyarat
keluarannya.
Karakteristik jaringan syaraf tiruan ditentukan oleh:
1. Pola hubungan antar neuron (disebut dengan arsitektur jaringan)
2. Metode penentuan bobot-bobot sambungan (disebut dengan pelatihan atau
proses belajar jaringan)
3. Fungsi aktivasi.[ Hermawan, Arief, 2006]
2.1.5 Kelebihan Jaringan Syaraf Tiruan
Sistem jaringan syaraf tiruan disebut juga brain metaphor, computational
neuroscience atau parallel distributed processing serta connection. Jaringan syaraf
tiruan tersusun dari sejumlah besar elemen yang melakukan kegiatan analog dengan
fungsi-fungsi biologis neuron yang paling elementer. Elemen–elemen ini terorganisasi
sebagaimana layaknya anatomi otak, walaupun tidak persis. Jaringan syaraf tiruan
dapat belajar dari pengalaman, melakukan generalisasi atas contoh–contoh yang
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
11
diperoleh dan mengabstraksi karakteristik essensial input bahkan untuk data yang
tidak relevan.
Jaringan syaraf tiruan memiliki sejumlah besar kelebihan dibandingkan dengan
metode perhitungan lainnya, yaitu:
1. Kemampuan mengakusisi pengetahuan walaupun dalam kondisi ada
gangguan dan ketidakpastian. Hal ini karena jaringan syaraf tiruan mampu
melakukan generalisasi, abstraksi, dan ekstraksi terhadap property statistic
dari data.
2. Kemampuan merepresentasikan pengetahuan secara fleksibel. Jaringan
syaraf tiruan dapat menciptakan sendiri representasi melalui pengaturan
diri sendiri atau kemampuan belajar (Self Organizing).
3. Kemampuan untuk memberikan toleransi atas suatu distorsi (error/fault),
dimana gangguan kecil pada data dapat dianggap hanya sebagai noise
(guncangan) belaka.
4. Kemampuan memproses pengetahuan secara efisien karena memakai
ssstem parallel, sehingga waktu yang diperlukan untuk mengoperasikan
menjadi lebih singkat.
Sedangkan keuntungan penggunaan Jaringan Syaraf Tiruan dalam hal
pengenalan pola:
1. Perangkat yang mampu untuk mengenali suatu pola secara non-linier.
2. Mempermudah pemetaan input menjadi suatu hasil tanpa mengetahui proses
sebenarnya.
3. Mampu melakukan pengadaptasian terhadap pengenalan suatu pola
4. Perangkat yang memiliki toleransi terhadap suatu kesalahan dalam pengenalan
suatu pola.
5. Neural Network mampu diimplementasikan pada suatu Hardware atau
perangkat keras.
6. Perangkat yang mampu diimplementasikan secara parallel.
Dengan tingkat kemampuan yang sangat baik, beberapa aplikasi jaringan
syaraf tiruan sangat cocok untuk diterapkan pada:
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
12
1. Klasifkasi, memilih suatu input data kedalam satu kategori tertentu yang
diterapkan.
2. Asosiasi, menggambarkan suatu objek secara keseluruhan hanya dengan
sebuah bagian dari objek lain.
3. Self Organizing, kemampuan untuk mengelola data input tanpa harus
memiliki data sebagai target.
4. Optimasi, menemukan suatu jawaban atau solusi yang paling baik sehingga
seringkali dengan meminimalisasikan suatu fungsi biaya (optimizer).
(Hermawan, Arief, 2006)
2.2 Model Neuron
Neuron adalah unit pemroses informasi yang menjadi dasar dalam pengoperasian
jaringan syaraf tiruan. Neuron terdiri dari 3 (tiga) elemen pembentuk:
1. Himpunan unit-unit yang dihubungkan dengan jalur koneksi. Jalur-jalur
tersebut memiliki bobot/kekuatan yang berbeda-beda. Bobot yang bernilai
positif akan memperkuat sinyal dan yang bernilai negatif akan
memperlemah sinyal yang dibawanya. Jumlah, struktur dan pola hubungan
antar unit-unit tersebut akan menentukan arsitektur jaringan (dan juga
model jaringan yang dibentuk).
2. Suatu unit penjumlah yang akan menjumlahkan input-input sinyal yang
sudah dikalikan dengan bobotnya.
Misalkan x1,x2, .. , xm adalah unit-unit input dan wj1, wj2, ... , wjm adalah bobot
penghubung dari unit-unit tersebut ke unit keluaran Yj, dengan demikian unit
penjumlah akan memberikan keluaran sebesar uj = xjwj1 + x2wj2 + ... + xmwjm
3. Fungsi aktivasi yang akan menentukan apakah sinyal dari input neuron
akan diteruskan ke neuron lain atau tidak.(Siang, Jong Jek, 2005)
Bentuk dasar arsitektur suatu neural network adalah sebagai berikut:
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
13
Gambar 2. Arsitektur dasar Jaringan Syaraf Tiruan
Secara umum, terdapat 3 (tiga) jenis jaringan syaraf yang sering digunakan
berdasarkan jenis jaringannya (network), yaitu:
1. Single-Layer Neural Network
2. Multilayer Perceptron Neural Network
3. Recurrent Neural Networks
2.2.1 Single-Layer Neural Network
Neural network jenis ini memiliki koneksi pada inputnya secara langsung ke jaringan
output.
Gambar 3. Single Layer Neural Network
Jenis neural network ini sangatlah terbatas, hanya digunakan pada kasus-kasus yang
sederhana.
Input Output
p(1)
p(2)
p(R)
a(1)
a(S)
b(1)
w(S,R)
Input Output
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
14
2.2.2 Multilayer Perceptron Neural Network
Jenis neural network ini memiliki layer (lapisan) yang dinamakan “hidden”, ditengah
layer input dan output. Hidden ini bersifat berubah-ubah, dapat digunakan lebih dari
satu hidden layer.
Gambar 4. Multilayer Perceptron Neural Network
Input Output Hidden
p(1)
p(2)
p(R)
a2(1)
a2(S2)
a1(1)
a1(S1)
b1(1) b2(1)
w(S1,R) w(S2,S1)
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
15
2.2.3 Recurrent Neural Network
Neural network jenis ini memiliki ciri, yaitu adanya koneksi umpan balik dari output
ke input.
Gambar 5. Recurrent Neural Network
Salah satu yang termasuk dalam jenis network ini adalah Hopfield Network.
2.3. Proses Pembelajaran pada Jaringan Syaraf Tiruan
Proses pembelajaran merupakan suatu metoda untuk proses pengenalan suatu pola
yang sifatnya kontinu yang selalu direspon secara berbeda dari setiap proses
pembelajaran tersebut. Tujuan dari pembelajaran ini sebenarnya untuk memperkecil
tingkat suatu error (kesalahan) dalam pengenalan suatu pola. Secara mendasar,
jaringan syaraf tiruan memiliki sistem pembelajaran yang terdiri atas beberapa jenis
berikut:
1. Supervised Learning
2. Unsupervised Learning
Input Output
p(1)
p(2)
p(R) w(S,R)
b(1)
a(1)
a(S)
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
16
2.3.1. Supervised Learning
Sistem pembelajaran pada metoda Supervised Learning adalah sistem pembelajaran
yang mana, setiap pengetahuan yang akan diberikan kepada sistem, pada awalnya
diberikan suatu acuan untuk memetakan suatu masukan menjadi suatu keluaran yang
diinginkan. Proses pembelajaran ini akan terus dilakukan selama kondisi kesalahan
atau kondisi yang diinginkan belum tercapai. Adapun setiap perolehan kesalahan akan
dikalkulasikan untuk setiap pemrosesan hingga data atau nilai yang diinginkan telah
tercapai.
2.3.2. Unsupervised Learning
Sistem pembelajaran pada jaringan syaraf tiruan, yang mana sistem ini memberikan
sepenuhnya pada hasil komputasi dari setiap pemrosesan, sehingga pada sistem ini
tidak membutuhkan adanya acuan awal agar perolehan nilai dapat dicapai. Meskipun
secara mendasar, proses ini tetap mengkalkulasikan setiap langkah pada setiap
kesalahannya dengan mengkalkulasikan setiap nilai bobot yang didapat.
2.4. Model Jaringan Hopfield
Algoritma Artificial Neural Network Hopfield diperkenalkan pada tahun 1982 di
California Institute of Technology. Dalam jaringan Hopfield semua neuron saling
berhubungan penuh. Neuron yang satu mengeluarkan output dan kemudian menjadi
input bagi semua neuron lain. Proses ini terus berulang sampai output yang diinginkan
tercapai.
Model Diskrit jaringan Hopfield dalam bobot sinaptiknya menggunakan vektor
biner dimensi n atau dapat dituliskan a{0,1}n. Model ini berisi n neural dan jaringan
terdiri dari n(n-1) interkoneksi dua jalur.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
17
Model Jaringan Hopfield secara matematis dapat disajikan dalam matriks
simetris NxN dengan diagonal utamanya bernilai 0. Pemberian nilai 0 pada diagonal
utama dimaksudkan agar setiap neuron tidak memberi input pada dirinya sendiri.
Dengan demikian jaringan Hopfield merupakan suatu jaringan dengan bobot simetrik,
bahwa:
wij = wji
dan
wii = 0.
Perubahan data pada jaringan terjadi secara asinkron (unit berubah satu persatu,
tergantung pada sinyal yang diterima). Perubahan yang terjadi memiliki sebuah fungsi
yang berguna untuk melihat apakah sebuah jaringan sudah dalam kondisi stabil.
Dalam hal ini Hopfield menggunakan fungsi Lyapunov. Jaringan dikatakan sudah
stabil jika terjadi konvergen pada aktivasi yang ada.
2.5.1. Input (Masukan)
Proses ini merupakan bagian dari sistem kerja secara keseluruhan, karena proses
masukan digunakan untuk menunjang pada proses pembelajaran serta proses
pengujian. Pada proses ini, masukan berupa grafis berupa piksel yang di
representasikan sebagai nilai logic atau bilangan biner (1 dan 0, atau dalam bentuk
bipolar menjadi 1 dan -1). Pola grafis kemudian diubah ke dalam bentuk matriks.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
18
Contoh bidang yang sudah diisi dengan pola x
Gambar 6. Sekumpulan titik membentuk pola x pada bidang gambar
Dari bidang tersebut diperoleh bentuk matriks yang bersesuaian:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 0 0 1 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 1 0 0 1 0 0 0
0 0 1 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
19
Dari matriks di atas kemudian diubah ke dalam bentuk bipolar sehingga diperoleh:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 1 -1 -1 -1 -1 1 -1 -1
-1 -1 -1 1 -1 -1 1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 1 -1 -1 1 -1 -1 -1
-1 -1 1 -1 -1 -1 -1 1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Matriks di atas kemudian diolah menjadi matriks bobot yang akan digunakan sebagai
media penyimpan pola, sekaligus menandakan dimulainya proses pembelajaran.
2.5.2. Proses Pembelajaran
Pada bagian ini merupakan sisi kelebihan dari metoda Jaringan Syaraf Tiruan, dimana
setiap permasalahan yang akan dihadapi dapat dipecahkan dengan melalui tahapan
pembelajaran, seperti halnya otak manusia yang secara sifat biologis, memiliki
kemampuan untuk mempelajari hal-hal yang baru. Memang pada dasarnya, jaringan
syaraf tiruan ini dibuat untuk dapat mempelajari sesuatu hal yang baru sehingga
mampu melakukan penganalisaan tanpa menggunakan suatu rumusan yang baku.
Proses pembelajaran ini sangat mempengaruhi sensitifitas kemampuan dalam
melakukan penganalisaan. Jika semakin banyak bahan atau masukan sebagai
pembelajaran, maka akan semakin mudah dan sensitif dalam melakukan analisa.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
20
2.5.3. Proses Perhitungan Saat Pembelajaran
Proses ini melibatkan 2 (dua) faktor penting, yaitu masukan dan keluaran yang
ditentukan. Keluaran tersebut merupakan bagian dari sistem atau metoda
pembelajaran yang dinamakan “Supervised Learning”, dengan demikian setiap
masukan memiliki keluaran yang nantinya akan dijadikan sebagai acuan pembelajaran.
Hal inilah yang membuat Neural Network melakukan penganalisaan, selain
banyaknya masukan yang diberikan, proses pembelajaran yang dilakukan secara
berulang pun akan menunjang kemampuan Neural Network saat menganalisa.
2.5.4. Output (Keluaran)
Bagian ini merupakan proses yang digunakan untuk mengetahui seberapa besar
pengaruh pembelajaran terhadap keluaran yang diinginkan. Jika hasil yang diinginkan
kurang sesuai, maka kemungkinan yang terjadi adalah:
Variabel masukan (informasi yang diberikan) kurang menunjang
Kurangnya layer pada rancangan keseluruhan
Jumlah neuron yang terlalu sedikit
Namun tidak menutup kemungkinan karena ketidaksesuaian penerapan saat proses
pembelajaran dilakukan juga dapat mempengaruhi proses pembelajaran.
2.6. Algoritma Hopfield
Terdapat beberapa versi algoritma dari jaringan Hopfield. Pada penjelasan pertama
Hopfield (1982) menggunakan input vektor biner. Untuk menyimpan suatu pola biner
S(p), p = 1,…, p, dimana
S(p) = (S1(p),…, Si(p), …, Sn(p)),
untuk matriks bobotnya W = {wij} diperoleh dengan
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
21
untuk i ≠ j
dan
Pada penjelasan lainnya Hopfield (1984) menggunakan input bipolar. Untuk
menyimpan pola bipolar, matriks bobot yang digunakan W = {wij}, diperoleh dengan
dan
Proses pembelajaran terjadi pada saat neuron yang saling terhubung aktif pada
saat yang bersamaan. Jika ini terjadi, maka nilai bobot harus berubah. Dalam proses
perubahan bobot Hopfield menggunakan aturan Hebb, yang mana:
Aplikasi dari algoritma jaringan Hopfield dapat dilihat:
Langkah 1. Inisialisasi bobot untuk menyimpan pola dengan menggunakan aturan
Hebb.
Jika aktivasi jaringan belum mencapai konvergen ulangi langkah 2 sampai 8.
Langkah 2. Untuk setiap input vektor x, lakukan langkah 3 sampai 7.
Langkah 3. Tentukan aktivasi awal jaringan sama dengan input eksternal
vektor x.
Langkah 4. Lakukan langkah 5 sampai 7 untuk setiap Yi, perubahan
unit adalah acak.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
22
Langkah 5. Hitung jaringan input:
Langkah 6. Tentukan aktivasi (sinyal output)
Untuk ambang, , biasanya bernilai nol.
Langkah 7. Masukkan nilai yi ke dalam unit-unit lainnya.
(terjadi perubahan vektor aktivasi).
Langkah 8. Uji apakah terjadi konvergensi
Analisa pada fungsi Lyapunov (biasa juga disebut sebagai fungsi energi) untuk
jaringan Hopfield adalah bagian penting yang akan menunjukkan bahwa telah terjadi
konvergensi, dimana sebelumnya bobot telah berubah secara asinkron dan nilai 0 pada
diagonalnya (Fausett, L, 1994).
Adapun Algoritma Hopfield dalam penerapan pola angka 0 sampai angka 9
adalah sebagai berikut:
1. Menciptakan vektor pola yang ke – p, yang merupakan himpunan n simpul untuk
pola yang ke- p.
S(p) = (S1(p), S2(p), …, Si(p), …, Sn(p))
Keterangan: P = Jumlah Pola Angka
2. Menciptakan matriks koneksi sebagai tempat pola contoh yaitu angka 0 sampai
pola angka 9 yang disimpan dalam suatu konstanta.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
23
Koneksi pada jaringan syaraf Hopfield dapat dilihat pada tabel berikut:
Tabel 1. Koneksi pada jaringan syaraf Hopfield
Neuron 1 (N1) Neuron 2 (N2) Neuron 3 (N3) Neuron 4 (N4)
Neuron 1 (N1) Tidak Ada N2>N1 N3>N1 N4>N1
Neuron 2 (N2) N1>N2 Tidak Ada N3>N2 N4>N2
Neuron 3 (N3) N1>N3 N2>N3 Tidak Ada N4>N3
Neuron 4 (N4) N1>N4 N2>N4 N3>N4 Tidak Ada
3.
Keterangan: P = jumlah bobot
Wij = bobot koneksi dari simpul i ke simpul j
Si(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1
Sj(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1
Untuk membentuk matriks bobot dimulai dengan matriks koneksi bobot
kosong:
Misalkan ingin menerima nilai 0101, untuk ini terlebih dahulu dibentuk matriks
koneksi dari 0101. Matriks koneksinya kemudian ditambahkan ke dalam matriks
koneksi bobot. Saat nilai dimasukkan, matriks koneksi bobot berada dalam proses
pengenalan pola baru.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
24
Langkah berikutnya adalah mengubah nilai 0101 menjadi bipolar, sehingga
menjadi:
0 = -1
1 = 1
0 = -1
1 = 1
Sehingga diperoleh sebuah array -1, 1, -1, 1. Array ini kemudian digunakan untuk
membangun matriks kontribusi 0101 dengan cara mengalikan dengan transposenya.
Hasilnya dapat dilihat sebagai berikut:
Langkah selanjutnya adalah membuat 0 secara diagonal nilai dari sudut kiri atas
sampai sudut kanan bawah. Hal ini dilakukan karena neuron pada jaringan Hopfield
tidak terhubung pada dirinya sendiri, sehingga matriks diatas menjadi:
Matriks di atas dapat ditambahkan ke dalam matriks koneksi bobot yang sudah ada.
Jika pola yang ingin dikenali hanya 0101, maka matriks di atas menjadi matriks
bobotnya.
4. Kerjakan langkah-langkah ini selama pola belum konvergen.
Langkah a: Untuk tiap vektor x (x1, x2, …, xn).
Langkah b: Inisialisasi pola input yang tidak diketahui.
Yi = Xi dengan (i = 1 … n)
Langkah c: Kerjakan langkah b sampai semua pola diuji.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
25
Langkah d:
Langkah e: Determinitive Activation (Sinyal Output).
yi =
Keterangan: 0i selalu berharga 0
Langkah f: Hasil dari output Yi berlaku untuk semua pola lain.
Langkah g: Uji pola sampai konvergen.
1 untuk y_ini 0
-1 untuk y_ini < 0
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
26
2.7. Flowchart Algoritma Hopfield
Gambar 7. Flowchart Algoritma Hopfield
Tentukan Matriks Bobot
Bangun JST Hopfield
Jalankan JST Hopfield
Sampai Keadaan Stabil
Proses
Pembelajaran
Pro
ses Kalk
ulasi
Cek
Kondisi
Konvergen
Tidak
Terpenuhi
Terpenuhi
Mulai
Pola Angka
Dikenali
Selesai
Cek
Solusi
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
27
BAB 3
ANALISIS DAN PERANCANGAN APLIKASI
3.1 Analisis Kebutuhan
Tulisan tangan sangat penting dalam komunikasi antar manusia. Baik dalam
kebutuhan komunikasi pribadi seperti surat menyurat, catatan, maupun dalam
komunikasi bisnis seperti surat berharga bank, pajak, perjanjian kerja dan lain-lain.
Tulisan tangan adalah hasil penggabungan kerja otak dan tubuh seseorang, sehingga
menjadikannya berbeda antar setiap pribadi sebagaimana wajah dan sifatnya.
Interaksi dan ketergantungan manusia akan komputer semakin meningkat.
Komputer semakin dibutuhkan untuk mempermudah pekerjaan. Pengenalan pola
tulisan tangan secara otomatis sangat dibutuhkan apabila dokumen-dokumen
tersikulasi berada pada jumlah yang besar.
Angka-angka pada kartu pos, cek bank, pajak akan lebih mudah untuk disortir
apabila pendataan dapat dilakukan secara otomatis. Beberapa penelitian telah berhasil
menghasilkan penerapan dari pengenalan pola angka. Dengan menggunakan Optical
Characters Recognition (OCR), Salim Ouchtati menunjukkan pengenalan pola yang
sudah mengalami kerusakan pada tampilannya.
Dengan dasar penelitian jurnal di atas, penulis mencoba untuk mengenali pola
angka dengan algoritma yang berbeda yakni dengan menggunakan algoritma Hopfield.
Berdasarkan landasan teori, secara umum bentuk struktur jaringan syaraf
tiruan Hopfield dapat digambarkan sebagai berikut:
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
28
Gambar 8. Struktur Jaringan Hopfield
Keterangan: x 0..N = input
y0...N = output
w00…ij = bobot
3.2 Aplikasi Algoritma Hopfield
Misalkan dalam sebuah vektor biner tersimpan pola 1, 1, 1, 0 atau ekuivalen dengan
bipolar yaitu pola 1, 1, 1, -1 dan dimasukkan ke dalam sebuah network. Misalkan pola
yang tersimpan dirusak dan diberi derau ataupun polanya diacak sehingga berubah
menjadi 0, 0, 1, 0, oleh karena itu dengan menggunakan algoritma Hopfield dapat
diperoleh kembali pola semula yaitu 1, 1, 1, 0. Output dari pola misalkan disimpan
dalam bentuk acak yaitu Y1, Y4, Y3, dan Y2.
Penyelesaian dari masalah pada halaman sebelumnya adalah sebagai berikut:
Langkah 1: Inisialisasi bobot untuk menyimpan pola, yaitu:
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
29
W =
Langkah 2: Vektor input yang sudah diacak adalah X=(0, 0, 1, 0), dengan X1=0, X4=0,
X3=1, dan X2=0.
Dari vektor input, akan dimasukkan ke dalam jaringan.
Langkah 3: Tentukan nilai output Y awal yaitu vektor input x yang diacak (0, 0, 1, 0).
Langkah a: Pilihlah unit Y1 untuk melakukan perubahan aktivasi.
= 0 + 1
= 1
Langkah b: y_in1 > 0 → y1 = 1
Karena nilai y_in1 lebih besar dari 0, maka aktivasi berubah dan menja-
dikan nilai Y1=1.
Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau
dalam bentuk vektor (1, 0, 1, 0).
Langkah 4:
Langkah a: Pilihlah unit Y4 untuk melakukan perubahan aktivasi.
= 0 + (-2)
= -2
Langkah b: y_in4 > 0 → y4 = 0
Karena nilai y_in4 kurang dari 0, maka aktivasi tetap dan menjadi-
kan nilai Y4 tetap bernilai = 0.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
30
Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau
dalam bentuk vektor (1, 0, 1, 0).
Langkah 5:
Langkah a: Pilihlah unit Y3 untuk melakukan perubahan aktivasi.
= 1 + 1
= 2
Langkah b: y_in3 > 0 → y3 = 1
Karena nilai y_in1 lebih besar dari 0, maka aktivasi berubah dan menja-
dikan nilai Y3 = 1.
Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau
dalam bentuk vektor (1, 0, 1, 0).
Langkah 6:
Langkah a: Pilihlah unit Y2 untuk melakukan perubahan aktivasi.
= 0 + 2
= 2
Langkah b: y_in2 > 0 → y2 = 1
Karena nilai y_in2 lebih besar dari 0, maka aktivasi berubah dan menja-
dikan nilai Y1=1.
Langkah c: Nilai output terakhir adalah: Y1=1, Y4=0, Y3=1, dan Y2=1, atau
dalam bentuk vektor (1, 1, 1, 0).
Langkah 7: Lakukan pengujian sampai output konvergen.
Karena iterasi terakhir output sudah menunjukkan kondisi konvergen,
maka output tersebut akan dijadikan output jaringan syaraf tiruan.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
31
3.3. Kondisi Konvergen
Hopfield (1984) melalui penelitiannya membuktikan bahwa jaringan syaraf tiruannya
akan konvergen pada nilai batas stabil dengan menggunakan fungsi Lyapunov (fungsi
energi). Fungsi energi pada jaringan Hopfield sebagai berikut:
Jika aktivasi jaringan berubah berdasarkan yi, maka energi akan berubah menjadi
Pada saat aktivasi neuron Yi, jika yi positif maka akan berubah menjadi nol. Dengan
demikian
untuk yi negatif, maka akan menjadi positif yaitu
Dalam penelitiannya Hopfield menemukan bahwa pola biner yang dapat disimpan dan
dipanggil kembali dalam sebuah jaringan, dengan ketepatan yang baik adalah sebesar
dimana n adalah jumlah neuron dalam suatu jaringan.
3.4 Rancangan Tampilan
Perangkat lunak pengenalan pola angka akan ditampilkan dalam halaman situs web
dengan menggunakan Java applet. Pilihan menu dari masing-masing perintah akan
ditampilkan dengan sistem menu icon. Tombol menu akan disusun sesuai dengan
urutan perintah pengenalan pola, antara lain:
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
32
1. Tombol menu Clear Display, digunakan untuk membersihkan bidang gambar
dari pola-pola.
2. Tombol menu Randomize, digunakan untuk menggambar pola acak.
3. Tombol menu Memorize, digunakan menyimpan pola yang sudah digambar ke
dalam memori komputer.
4. Tombol menu Test, digunakan untuk mencoba membandingkan pola-pola
yang sudah tersimpan dengan pola yang baru.
5. Tombol menu Clear Memory, digunakan untuk membersihkan data yang
tersimpan dalam memori komputer.
6. Tombol First Pattern, digunakan untuk menampilkan pola pertama yang sudah
disimpan terlebih dahulu pada bidang gambar.
7. Tombol Last Pattern, digunakan untuk menampilkan pola yang terakhir
disimpan pada bidang gambar.
Gambar 9. Rancangan Tampilan Program Applet Pada Browser
3.5 Rancangan Masukan Dan Keluaran
3.5.1 Rancangan Masukan
Untuk memasukkan data hanya digunakan piranti tetikus, yang digunakan untuk
memilih menu yang ada serta menggambar pola pada bidang yang telah disediakan.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
33
Pola dapat digambar pada bidang dengan cara menekan tombol kiri atau kanan
sehingga bidang gambar akan berubah warna menandakan sebuah variabel telah
terbentuk, dalam hal ini piksel. Pola dapat dihapus dengan cara yang sama seperti cara
menggambar pola.
3.5.2 Rancangan Keluaran
Pola yang sudah disimpan dapat ditampilkan kembali dengan tombol menu yang ada
pada bagian atas bidang gambar. Pola akan ditampilkan dalam bidang yang sama
dengan masukan. Selain pola akan ditampilkan juga grafik garis pada bidang sebelah
gambar yang berfungsi untuk melihat perbandingan antar pola yang satu dengan yang
lainnya.
3.2 Analisis Kebutuhan Perangkat Keras
Selain dengan Java, untuk mengetahui bagaimana proses pengenalan pola angka juga
dapat digunakan perangkat lunak yang dapat mempermudah proses komputasi dalam
penelitan bidang jaringan syaraf tiruan, dalam hal ini yang digunakan adalah
perangkat lunak Matlab 7.1 release 14, The MathWorks, Inc..
Kecepatan pemrosesan data pada Matlab bergantung pada sistem komputer
yang digunakan. Semakin baik spesifikasi komputer yang digunakan, hasil
perhitungan akan ditampilkan lebih cepat. Spesifikasi sistem yang digunakan dalam
percobaan:
1. Prosesor Intel Pentium D 3 GHz.
2. Memori RAM 4 GB.
3. Harddisk 80 GB.
4. O/S Windows XP Profesional SP3.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
34
BAB 4
PEMBAHASAN
4.1 Perangkat Lunak
Untuk membangun sebuah perangkat lunak diperlukan pemahaman tentang teknik
pemrograman komputer. Sebuah perangkat lunak pada dasarnya terdiri atas
sekumpulan perintah-perintah dalam bahasa komputer, yang bertujuan agar sebuah
komputer dapat mengerjakan suatu pekerjaan sesuai dengan keinginan pemakainya.
Dewasa ini sudah banyak berkembang beragam jenis bahasa pemrograman yang
memiliki metode pemrograman yang berbeda-beda. Salah satu bahasa pemrograman
yang banyak dipakai dewasa ini adalah bahasa pemrograman Java.
Java adalah sebuah bahasa pemrograman yang dikembangkan oleh perusahaan
Sun Microsystems. Bahasa pemrograman ini memiliki keunggulan dimana perangkat
lunak yang dibuat dapat dijalankan pada hampir semua sistem operasi seperti
Windows, UNIX, dan Macintosh. Hal ini dimungkinkan karena hampir semua sistem
operasi dewasa ini sudah memiliki penerjemah dan pengolah Java, yang dinamakan
Java Virtual Machine (JVM).
Bahasa pemrograman Java dapat menghasilkan perangkat lunak yang fleksibel,
mulai dari perangkat lunak berukuran kecil yang dapat dijalankan pada sebuah
halaman situs web, sampai perangkat lunak berukuran besar yang dapat menjalankan
beberapa fungsi sekaligus. Hal ini dimungkinkan karena karakteristik pemrograman
Java yang berorientasi objek. Dengan kemampuannya ini Java dapat dijalankan dalam
beragam keadaan komputer, terutama yang berhubungan dengan antarmuka yang
sifatnya grafis.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
35
4.2 Struktur Data
Sebuah perangkat lunak yang bertujuan untuk mengenali sebuah pola memerlukan
sebuah struktur data, yang nantinya akan menentukan bagaimana data yang berupa
sekumpulan piksel disimpan ke dalam memori komputer dan kemudian dipanggil
kembali sebagai data pembanding. Data yang dimasukkan nantinya berupa matriks
yang diperoleh dari piksel-piksel yang telah terlebih dahulu ditentukan bidang
gambarnya.
Pola-pola angka yang dibandingkan nantinya akan memiliki bentuk yang
berbeda-beda sehingga diperlukan record yang berfungsi untuk menyimpan
serangkaian data dalam satu variabel. Untuk pola yang pertama sekali dimasukkan
sebagai pembanding perlu diberikan nama yang berbeda dengan pola akhir yang
digunakan sebagai penguji sehingga perubahan piksel dapat dibandingkan.
Adapun deklarasi applet dalam Java adalah sebagai berikut:
public class HopfieldApp extends Applet
{
HopMem mem;
Pattern current_pattern;
Pattern first_pattern;
Pattern last_pattern;
int xsize;
int ysize;
Color bgrnd;
boolean erase;
boolean first;
boolean changed;
double overlap1[];
double overlap2[];
int overlap;
HopCanvas hopCanvas;
Dari type data di atas dapat ditampung data yang berupa piksel dari pola-pola
yang dibentuk dari 10x10 node.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
36
4.3 Pengenalan Pola dengan Matlab
Aplikasi algoritma Hopfield ke dalam applet tidak menampilkan perubahan yang
terjadi pada bobot jaringan. Untuk melihat perhitungan bobot dapat digunakan
aplikasi Matlab. Dalam penulisan ini penulis menggunakan Matlab versi 7. Adapun
pola yang penulis gunakan dalam Matlab sebagai berikut:
Gambar 10. Pola aplikasi algoritma Hopfield untuk mengenali pola pada Matlab
Dalam penelitian pada Matlab, pola dibentuk dari matriks berukuran 10x12
dan jumlah pola yang akan disimpan dalam jaringan sebanyak 8 buah. Setelah pola
dipilih selanjutnya adalah mengacaknya sehingga diperoleh bentuk:
Gambar 11. Pola angka 3 yang diacak
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
37
Dengan menggunakan perhitungan algoritma Hopfield, diharapkan pola yang
telah diacak dapat dikenali sebagai angka 3. Pada percobaan jumlah iterasi yang
penulis gunakan dalam menampilkan kondisi pembaruan jaringan adalah 10. Pada
kondisi iterasi ke-10, pola angka menjadi:
Gambar 12. Pola angka pada iterasi ke-10
Pola mulai dapat dikenali pada iterasi ke-30 dengan kondisi pola menjadi:
Gambar 13. Pola angka pada iterasi ke-30
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
38
Pada iterasi ke-45 pola dikenali sebagai angka 3 dimana kondisi pola menjadi:
Gambar 14. Pola angka pada iterasi ke-45
4.4 Aplikasi Algoritma ke dalam Program Java
Sebuah gambar atau pola merupakan sekumpulan titik-titik yang disusun sehingga
menghasilkan suatu bentuk. Pada komputer gambar atau pola disusun oleh
sekumpulan titik yang dinamakan piksel. Untuk mengenali pola terlebih dahulu piksel
diubah ke dalam bentuk matriks, kemudian disimpan ke dalam komputer.
Gambar 15. Contoh pola angka satu pada bidang gambar yang akan dipelajari
komputer
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
39
Untuk pola angka satu pada halaman sebelumnya, matriks yang bersesuaian:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 -1 1 1 -1 -1 -1 -1
-1 -1 -1 1 1 1 1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Pola angka 1 (satu) pada halaman sebelumnya akan dipelajari dan disimpan ke dalam
komputer. Misalkan ada pola angka 1 yang memiliki bentuk berbeda dengan pola
pada halaman sebelumnya langkah-langkah pengenalannya dapat dilihat sebagai
berikut.
Misal gambar pola angka 1 yang baru:
Gambar 16. Pola angka 1 yang akan dikenali komputer
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
40
4.3.1. Algoritma Pengenalan Pola pada Komputer
Untuk mengenali pola angka yang dimasukkan ke dalam program, komputer akan
menjalankan langkah-langkah berikut:
Langkah 1:
Ubah piksel menjadi bentuk bipolar dengan perintah:
int i = parent.xsize;
int j = parent.ysize;
int k = mouseevent.getX();
int l = mouseevent.getY();
Pattern pattern = parent.current_pattern;
Penekanan tetikus akan memanggil perintah yang berfungsi sebagai deteksi apakah
pada bidang telah terjadi suatu input. Jika komputer mendeteksi penekanan, maka
piksel dengan warna merah akan ditampilkan sekaligus memberikannya nilai. Dari
pola angka Gambar 10 diperoleh vektor bipolar:
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1,
-1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1,
1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1,1, -1, -1, -1, -1, -1, -1,
-1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Langkah 2:
Setelah konversi piksel, jika ada perintah untuk menyimpan pola maka komputer akan
mulai menjalankan algoritma Hopfield, dimulai dari inisialisasi bobot. Untuk
memperoleh matriks bobot dari Gambar 10, matriks kontribusi dikalikan dengan
transposenya sehingga diperoleh matriks:
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
41
1 1 1 1 1 1 1 1 1 1
1 1 1 1 -1 -1 1 1 1 1
1 1 1 -1 -1 -1 1 1 1 1
1 1 -1 1 -1 -1 1 1 -1 1
1 -1 -1-1 -1 -1 -1 -1 -1 1
1 -1 -1 -1-1 -1 -1 -1 -1 1
1 1 1 1 -1 -1 1 1 -1 1
1 1 1 1 -1 -1 1 1 1 1
1 1 1 -1 -1 -1 -1 1 1 1
1 1 1 1 1 1 1 1 1 1
Perintah yang digunakan untuk menghitung bobot sebagai berikut:
weights[i][j] = weights[i][j] + pattern.pattern[i] * pattern.pattern[j];
Selanjutnya nilai diagonal akan diubah menjadi 0 sehingga diperoleh matriks
bobotnya:
0 1 1 1 1 1 1 1 1 1
1 0 1 1 -1 -1 1 1 1 1
1 1 0 -1 -1 -1 1 1 1 1
1 1 -1 0 -1 -1 1 1 -1 1
1 -1 -1-1 0 -1 -1 -1 -1 1
1 -1 -1 -1-1 0 -1 -1 -1 1
1 1 1 1 -1 -1 0 1 -1 1
1 1 1 1 -1 -1 1 0 1 1
1 1 1 -1 -1 -1 -1 1 0 1
1 1 1 1 1 1 1 1 1 0
Langkah 3:
Matriks bobot di atas kemudian disimpan ke dalam komputer sebagai pola awal angka.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
42
Langkah 4:
Proses pengenalan pola akan dimulai ketika pola angka yang baru dimasukkan.
Komputer kemudian menghitung bobot pola baru, menghitung aktivasi, dan
melakukan perhitungan hingga terjadi konvergen. Input pola baru sebagai berikut:
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
Langkah 5:
Pada langkah ini komputer akan melakukan iterasi hingga tercapai kondisi stabil dari
jaringan. Pada penelitian iterasi yang dilakukan adalah sampai 10.
Langkah 6:
Setelah tercapai kondisi stabil pada jaringan, komputer kemudian akan memanggil
pola awal untuk ditampilkan beserta hasil iterasi pada bidang program.
4.4 Implementasi dalam Program Java dengan Applet
Berikut ditampilkan pola angka yang akan dikenali dengan algoritma Hopfield, mulai
dari angka 0 sampai 9.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
43
Gambar 17. Pola angka 0.
Gambar 18. Pola angka 1
Gambar 19. Pola angka 2 .
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
44
Gambar 20. Pola angka 3.
Gambar 21. Pola angka 4.
Gambar 22. Pola angka 5.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
45
Gambar 23. Pola angka 6.
Gambar 24. Pola angka 7.
Gambar 25. Pola angka 8.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
46
Gambar 26. Pola angka 9.
Setelah pola angka disimpan perlu diadakan pengecekan oleh program apakah
pola-pola tersebut dapat dibedakan antar satu dengan lainnya. Selain itu penulis juga
akan melakukan perbandingan antar pola yang memiliki bentuk yang hampir sama
atau perbandingan dengan bentuk yang telah diacak. Hal ini perlu dilakukan karena
pola angka bisa saja memiliki nilai yang sama namun berbeda dalam penampilan
bentuknya.
Gambar pada halaman berikut menunjukkan pola yang mengalami pengacakan
mendekati pola angka 2 dan angka 7.
Gambar 27. Pola angka yang telah diacak.
Dari hasil percobaan pada halaman sebelumnya program mengenali pola tersebut
sebagai angka 2. Dapat dilihat dari grafik garis berwarna merah, yakni angka 2
sebagai pola pertama.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
47
Gambar 28. Pola yang telah dikenali oleh program.
Selanjutnya yang memiliki bentuk hampir sama adalah 0 dan 8. Angka 0 yang diacak
memiliki kemungkinan menjadi angka 8 apabila pada bagian tengahnya terdapat
tambahan piksel. Pola berikut akan dicoba apakah program akan mengenalinya
sebagai pola angka 0 atau 8.
Gambar 29. Pola angka 0 yang diacak mendekati bentuk angka 8.
Dari hasil percobaan, program lebih mengenal pola sebagai angka 8. Dari gambar
berikut dapat dilihat dari hasil grafik garis warna biru sebagai pola terakhir yakni
angka 8.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
48
Gambar 30. Pola yang dikenali sebagai angka 8.
Berikutnya akan dicoba pengenalan pola dengan cara mengacak pola angka satu
sehingga diperoleh bentuk sebagai berikut:
Gambar 31. Pola angka 1 yang telah diacak.
Setelah dijalankan program masih bisa mengenali bahwa pola yang diacak di atas
merupakan pola angka 1. Dapat dilihat dari grafik garis warna biru yang mendekati
aktifasi 1.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
49
Gambar 32. Pola angka acak yang dikenali sebagai angka 1.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
50
BAB 5
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Adapun kesimpulan yang didapat dari algoritma Hopfield antara lain:
1. Setelah beberapa percobaan pengenalan pola dengan jaringan Hopfield,
menunjukkan pola dapat dikenali pada iterasi ke-45 dengan tingkat
probabilitas 0,3.
2. Dari hasil percobaan, algoritma Hopfield dapat digunakan untuk mengenali
pola-pola angka namun keakuratan dalam mengenali pola akan berkurang
seiring bertambahnya jumlah pola angka dan tingkat kerusakan dari pola angka
tersebut.
3. Kesalahan pengenalan pola angka mungkin terjadi pada pola angka yang
hampir mirip, seperti pada angka 1 dan 7, 8 dan 0, 5 dan 6.
5.2 Saran
Sebagai saran untuk mengenali pola angka secara lebih baik:
1. Sistem dapat dikembangkan menjadi lebih kompleks sehingga pola yang akan
ditampilkan dan dikenali bisa lebih terperinci.
2. Pengembangan sistem juga dapat menggunakan media optik sehingga pola
tidak hanya diinput dengan tetikus tetapi juga dapat melalui media foto.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
51
DAFTAR PUSTAKA
Desiani, Anita dan Muhammad Arhami. 2005. Konsep Kecerdasan Buatan. Edisi ke-1.
Yogyakarta: Penerbit ANDI.
Fausett, L. 1994. Fundamentals of Neural Networks: Architectures, Algorithms, and
Applications. Englewood Cliffs, New Jersey: Prentice-Hall, Inc.
Hermawan, Arief, 2006, “Jaringan Syaraf Tiruan Teori dan Aplikasi”,
Yogyakarta: Penerbit ANDI.
Hopfield, J. J. 1982. “Neural networks and physical systems with emergent collective
computational abilities”. Proceedings of the National Academy of Sciences:
79: 2554-2558 .
Hopfield, J. J. 1984. “Neurons with graded response have collective computational
properties like those of two-state neurons”. Proceedings of the National Aca-
demy of Sciences: 81: 3088-3092 .
Imada, A. dan Araki, K. “Hopfield model of associative memory as a test function of
evolutionary computations”.
Kristanto, Andri, 2004, “Jaringan Saraf Tiruan (Konsep Dasar, Algoritma dan
Aplikasinya )”, Yogyakarta: Gava Media.
Kusumadewi, Sri. 2003. Artificial Intelligence (Teknik dan Aplikasinya). Edisi ke-1.
Yogyakarta: Graha Ilmu.
Morris, Dan. http://techhouse.brown.edu/dmorris/JOHN/StinterNet.html. Diakses
tanggal 13 April, 2006.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
52
Ouchtati, S., Redjimi, M., Bedda, M. dan Bouchareb, F. “A new offline system for
handwritten digits recognition”. Asian Journal of Information Technology:
620-626, 2006.
Puspitaningrum, Diyah, 2006, “Pengantar Jaringan Syaraf Tiruan”, Yogyakarta:
Penerbit ANDI.
Seung, Sebastian. 2002. “The Hopfield model”.
Siang, Jong Jek, 2002, “Matematika Diskrit dan Aplikasinya pada Ilmu
Komputer” , Penerbit ANDI Yogyakarta.
Siang, Jong Jek, 2005, “Jaringan Syaraf Tiruan & Pemrogramannya
Menggunakan Matlab”, Penerbit ANDI Yogyakarta.
Sulehria, H. K. dan Ye Zhang. 2007. “Hopfield neural network–a survey”. Pro-
ceedingsof the 6th
WSEAS Int. Conf. on Artificial Intelligenc: hal. 125-130. Greece.
AI-Junkie. www.ai-junkie.com. Diakses tanggal 20 Januari, 2007.
Citeseer. http://citeseerx.ist.psu.edu. Diakses tanggal 10 Desember 2007.
Find Articles. www.findarticles.com. Diakses tanggal 13 April, 2006.
Heaton Research. www.heatonresearch.com. Diakses tanggal 15 Mei, 2007.
Neural Networks. www.doc.ic.ac.uk. Diakses tanggal 5 Agustus, 2007.
Wikipedia. www.wikipedia.com. Diakses tanggal 13 April, 2006.
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
LAMPIRAN
Tabel perubahan bobot jaringan W11 sampai W120,120 :
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
listing dari HopCanvas.class:
import java.awt.*;
import java.awt.event.*;
class HopCanvas extends Canvas
implements MouseListener, MouseMotionListener
{
HopfieldApp parent;
public HopCanvas(HopfieldApp hopfieldapp)
{
parent = hopfieldapp;
setSize(680, 200);
addMouseListener(this);
addMouseMotionListener(this);
}
public void mouseClicked(MouseEvent mouseevent)
{
int i = parent.xsize;
int j = parent.ysize;
int k = mouseevent.getX();
int l = mouseevent.getY();
Pattern pattern = parent.current_pattern;
int i1 = k / pattern.blocksize + (l / pattern.blocksize) * (i / pattern.blocksize);
if(k < i && l < j)
{
pattern.toggle(i1);
Graphics g = getGraphics();
if(pattern.pattern[i1] > 0)
{
parent.erase = false;
g.setColor(Color.red);
} else
{
parent.erase = true;
g.setColor(Color.blue);
}
g.fillRect((k - k % pattern.blocksize) + 1, (l - l % pattern.blocksize) + 1,
pattern.blocksize - 2, pattern.blocksize - 2);
parent.changed = true;
}
}
public void mouseDragged(MouseEvent mouseevent)
{
int i = parent.xsize;
int j = parent.ysize;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
int k = mouseevent.getX();
int l = mouseevent.getY();
Pattern pattern = parent.current_pattern;
boolean flag = parent.erase;
int i1 = k / pattern.blocksize + (l / pattern.blocksize) * (i / pattern.blocksize);
if(k < i && l < j)
{
Graphics g = getGraphics();
if(flag)
{
if(pattern.pattern[i1] > 0)
{
pattern.toggle(i1);
}
g.setColor(Color.blue);
} else
{
if(pattern.pattern[i1] < 0)
{
pattern.toggle(i1);
}
g.setColor(Color.red);
}
g.fillRect((k - k % pattern.blocksize) + 1, (l - l % pattern.blocksize) + 1,
pattern.blocksize - 2, pattern.blocksize - 2);
parent.changed = true;
}
}
public void mouseEntered(MouseEvent mouseevent)
{
}
public void mouseExited(MouseEvent mouseevent)
{
}
public void mouseMoved(MouseEvent mouseevent)
{
}
public void mousePressed(MouseEvent mouseevent)
{
}
public void mouseReleased(MouseEvent mouseevent)
{
}
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
public void paint(Graphics g)
{
paintRectangles();
paintGraph();
}
public void paintGraph()
{
Graphics g = getGraphics();
Pattern pattern = parent.current_pattern;
int l = parent.xsize;
int i1 = parent.ysize;
double ad[] = parent.overlap1;
double ad1[] = parent.overlap2;
int j1 = parent.overlap;
setBackground(Color.white);
g.setColor(Color.black);
g.drawRect(0, 0, l - 1, i1 - 1);
g.drawLine(l + 20, 10, l + 20, i1 - 20);
g.drawLine(l + 20, 10, l + 15, 20);
g.drawLine(l + 20, 10, l + 25, 20);
g.drawLine(l + 18, i1 - 100, l + 380, i1 - 100);
g.drawLine(l + 380, i1 - 100, l + 370, i1 - 105);
g.drawLine(l + 380, i1 - 100, l + 370, i1 - 95);
g.drawString("Iteration", l + 340, i1 - 108);
g.drawString("Overlap", l + 28, 20);
g.drawString("0", l + 9, i1 - 96);
g.drawString("First Pattern", l + 322, 20);
g.drawString("Last Pattern", l + 322, 40);
g.drawString("1", l + 9, i1 - 166);
g.drawString("1", l + 9, i1 - 26);
g.drawLine(l + 18, i1 - 30, l + 22, i1 - 30);
g.drawLine(l + 18, i1 - 170, l + 22, i1 - 170);
for(int i = 1; i < 10; i++)
{
g.drawLine(l + 20 + i * 34, i1 - 98, l + 20 + i * 34, i1 - 102);
}
g.setColor(Color.red);
g.drawLine(l + 300, 16, l + 320, 16);
if(j1 == 1)
{
g.drawRect(l + 21, i1 - 100 - (int)(ad[0] * 70D), 1, 1);
} else
{
for(int j = 0; j < j1 - 1; j++)
{
g.drawLine(l + 21 + j * 34, i1 - 100 - (int)(ad[j] * 70D), l + 21 + (j + 1) * 34,
i1 - 100 - (int)(ad[j + 1] * 70D));
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
}
}
g.setColor(Color.blue);
g.drawLine(l + 300, 36, l + 320, 36);
if(j1 == 1)
{
g.drawRect(l + 21, i1 - 100 - (int)(ad1[0] * 70D), 1, 1);
} else
{
for(int k = 0; k < j1 - 1; k++)
{
g.drawLine(l + 21 + k * 34, i1 - 100 - (int)(ad1[k] * 70D), l + 21 + (k + 1) *
34, i1 - 100 - (int)(ad1[k + 1] * 70D));
}
}
}
public void paintRectangles()
{
Graphics g = getGraphics();
Pattern pattern = parent.current_pattern;
int i = parent.xsize;
int j = parent.ysize;
setBackground(Color.white);
for(int k = 0; k < parent.current_pattern.length; k++)
{
int i1 = (k / (i / pattern.blocksize)) * pattern.blocksize;
int l = (k % (i / pattern.blocksize)) * pattern.blocksize;
if(pattern.pattern[k] > 0)
{
g.setColor(Color.red);
} else
{
g.setColor(Color.blue);
}
g.fillRect(l + 1, i1 + 1, pattern.blocksize - 2, pattern.blocksize - 2);
}
}
}
listing dari HopfieldApp.class:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
public class HopfieldApp extends Applet
{
HopMem mem;
Pattern current_pattern;
Pattern first_pattern;
Pattern last_pattern;
int xsize;
int ysize;
Color bgrnd;
boolean erase;
boolean first;
boolean changed;
double overlap1[];
double overlap2[];
int overlap;
HopCanvas hopCanvas;
public HopfieldApp()
{
bgrnd = Color.lightGray;
erase = false;
first = true;
changed = false;
}
public void init()
{
current_pattern = new Pattern();
mem = new HopMem();
String s = getParameter("wid");
String s1 = getParameter("ht");
String s2 = getParameter("size");
if(s != null && s1 != null)
{
xsize = Integer.parseInt(s);
ysize = Integer.parseInt(s1);
} else
{
xsize = 200;
ysize = 200;
}
if(s2 != null)
{
current_pattern.blocksize = Integer.parseInt(s2);
}
current_pattern.init(xsize, ysize);
mem.init(current_pattern);
mem.happ = this;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
overlap1 = new double[10];
overlap2 = new double[10];
for(int i = 0; i < 10; i++)
{
overlap1[i] = 0.0D;
overlap2[i] = 0.0D;
}
overlap = 0;
first_pattern = current_pattern.clone_it();
last_pattern = current_pattern.clone_it();
hopCanvas = new HopCanvas(this);
Panel panel = new Panel();
panel.setLayout(new FlowLayout());
Button button = new Button("Clear Display");
ActionListener actionlistener = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
current_pattern.init();
changed = true;
hopCanvas.paintRectangles();
}
};
button.addActionListener(actionlistener);
Button button1 = new Button("Randomize");
ActionListener actionlistener1 = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
current_pattern.randomize();
changed = true;
hopCanvas.paintRectangles();
}
};
button1.addActionListener(actionlistener1);
Button button2 = new Button("Memorize");
ActionListener actionlistener2 = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
mem.impose(current_pattern);
changed = true;
if(first)
{
first_pattern = current_pattern.clone_it();
first = false;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
}
last_pattern = current_pattern.clone_it();
}
};
button2.addActionListener(actionlistener2);
Button button3 = new Button("Test");
ActionListener actionlistener3 = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
current_pattern = mem.iterate(current_pattern);
}
};
button3.addActionListener(actionlistener3);
Button button4 = new Button("Clear Memory");
ActionListener actionlistener4 = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
mem.init(current_pattern);
first_pattern = current_pattern.clone_it();
last_pattern = current_pattern.clone_it();
changed = true;
}
};
button4.addActionListener(actionlistener4);
Button button5 = new Button("First Pattern");
ActionListener actionlistener5 = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
current_pattern = first_pattern.clone_it();
hopCanvas.paintRectangles();
}
};
button5.addActionListener(actionlistener5);
Button button6 = new Button("Last Pattern");
ActionListener actionlistener6 = new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
current_pattern = last_pattern.clone_it();
hopCanvas.paintRectangles();
}
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
};
button6.addActionListener(actionlistener6);
panel.add(button);
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
panel.add(button5);
panel.add(button6);
add("Top", panel);
add("Center", hopCanvas);
}
}
listing dari HopMem.class
import java.awt.Component;
import java.io.PrintStream;
class HopMem
{
boolean settling;
int size;
int weights[][];
HopfieldApp happ;
HopMem()
{
}
public void debug(Pattern pattern)
{
for(int i = 0; i < pattern.length; i++)
{
System.out.println(i + ": " + pattern.pattern[i]);
}
System.out.println("Weights: ");
for(int j = 0; j < pattern.length; j++)
{
for(int k = 0; k < pattern.length; k++)
{
System.out.print(j + "," + k + ": " + weights[j][k] + "\t");
}
System.out.println("");
}
}
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
public int ham(Pattern pattern, Pattern pattern1)
{
int j = 0;
for(int i = 0; i < pattern.length; i++)
{
if(pattern.pattern[i] * pattern1.pattern[i] <= 0)
{
j++;
}
}
return j;
}
public void impose(Pattern pattern)
{
for(int i = 0; i < pattern.length; i++)
{
for(int j = 0; j < pattern.length; j++)
{
if(i != j)
{
weights[i][j] = weights[i][j] + pattern.pattern[i] * pattern.pattern[j];
}
}
}
}
public void init(Pattern pattern)
{
settling = false;
size = pattern.length;
weights = new int[pattern.length][pattern.length];
}
public Pattern iterate(Pattern pattern)
{
if(happ.changed)
{
happ.changed = false;
happ.overlap1[0] = 0.0D;
happ.overlap2[0] = 0.0D;
for(int i = 0; i < pattern.length; i++)
{
happ.overlap1[0] += happ.first_pattern.pattern[i] * pattern.pattern[i];
happ.overlap2[0] += happ.last_pattern.pattern[i] * pattern.pattern[i];
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
}
happ.overlap1[0] /= pattern.length;
happ.overlap2[0] /= pattern.length;
happ.overlap = 1;
}
Pattern pattern1 = new Pattern();
pattern1.init(pattern);
for(int j = 0; j < pattern1.length; j++)
{
for(int l = 0; l < pattern1.length; l++)
{
pattern1.pattern[j] = pattern1.pattern[j] + pattern.pattern[l] * weights[j][l];
}
}
pattern1 = pattern1.normalize();
happ.overlap1[happ.overlap] = 0.0D;
happ.overlap2[happ.overlap] = 0.0D;
for(int k = 0; k < pattern1.length; k++)
{
happ.overlap1[happ.overlap] += happ.first_pattern.pattern[k] *
pattern1.pattern[k];
happ.overlap2[happ.overlap] += happ.last_pattern.pattern[k] *
pattern1.pattern[k];
}
happ.overlap1[happ.overlap] /= pattern1.length;
happ.overlap2[happ.overlap] /= pattern1.length;
happ.overlap++;
if(happ.overlap == 10)
{
happ.overlap = 0;
}
happ.current_pattern = pattern1;
happ.hopCanvas.repaint();
return pattern1;
}
}
listing dari Pattern.class
class Pattern
{
int length;
int blocksize;
int xsize;
int ysize;
int pattern[];
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Pattern()
{
}
public Pattern clone_it()
{
Pattern pattern1 = new Pattern();
pattern1.pattern = new int[length];
for(int i = 0; i < length; i++)
{
pattern1.pattern[i] = pattern[i];
}
pattern1.length = length;
pattern1.blocksize = blocksize;
pattern1.xsize = xsize;
pattern1.ysize = ysize;
return pattern1;
}
public void init()
{
for(int i = 0; i < length; i++)
{
pattern[i] = -1;
}
}
public void init(int i, int j)
{
xsize = i / blocksize;
ysize = j / blocksize;
length = (i / blocksize) * (j / blocksize);
pattern = new int[length];
init();
}
public void init(Pattern pattern1)
{
length = pattern1.length;
blocksize = pattern1.blocksize;
pattern = new int[length];
init();
}
public Pattern normalize()
{
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
for(int i = 0; i < length; i++)
{
if(pattern[i] != 0)
{
pattern[i] = pattern[i] / Math.abs(pattern[i]);
}
}
return this;
}
public void randomize()
{
for(int i = 0; i < length; i++)
{
pattern[i] = (int)(2L * Math.round(Math.random()) - 1L);
}
}
public void toggle(int i)
{
if(i < length)
{
pattern[i] = pattern[i] * -1;
}
}
}
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009