Jaringan Syaraf Tiruan untuk Identifikasi Wajah


Berikut ini merupakan contoh pemrograman Jaringan Syaraf Tiruan Backpropagation sederhana untuk identifikasi wajah seseorang berdasarkan ciri mata, hidung, mulut, dan telinga.


1. Langkah pertama yaitu mempersiapkan data untuk proses pelatihan dan pengujian
Berikut ini merupakan contoh data untuk proses pelatihan

No Ciri/ Feature Target
Mata Hidung Mulut Telinga Nama Orang
1 0.35 0.47 0.88 0.34 Adi
2 0.59 0.11 0.90 0.56 Budi
3 0.19 0.89 0.54 0.38 Candra
4 0.36 0.90 0.39 0.82 Dedi
5 0.58 0.45 0.80 0.91 Erik
6 0.40 0.45 0.80 0.35 Adi
7 0.61 0.11 0.90 0.55 Budi
8 0.20 0.87 0.56 0.41 Candra
9 0.38 0.88 0.35 0.85 Dedi
10 0.57 0.46 0.82 0.92 Erik
11 0.33 0.45 0.85 0.37 Adi
12 0.55 0.14 0.90 0.57 Budi
13 0.18 0.87 0.55 0.40 Candra
14 0.38 0.89 0.37 0.85 Dedi
15 0.56 0.47 0.83 0.91 Erik

Sedangkan contoh data untuk pengujian adalah sbb:

No Ciri/ Feature Target
Mata Hidung Mulut Telinga Nama Orang
1 0.38 0.43 0.85 0.34 Adi
2 0.60 0.14 0.87 0.57 Budi
3 0.19 0.88 0.60 0.40 Candra
4 0.35 0.90 0.41 0.83 Dedi
5 0.59 0.45 0.78 0.93 Erik

2. Langkah berikutnya yaitu menyusun data latih beserta target latih sesuai dengan format pemrograman JST di Matlab. Data latih disusun sehingga menjadi matriks berukuran 4 x 15 seperti berikut ini

0.35 0.59 0.19 0.36 0.58 0.40 0.61 0.20 0.38 0.57 0.33 0.55 0.18 0.38 0.56
0.47 0.11 0.89 0.90 0.45 0.45 0.11 0.87 0.88 0.46 0.45 0.14 0.87 0.89 0.47
0.88 0.90 0.54 0.39 0.80 0.80 0.90 0.56 0.35 0.82 0.85 0.90 0.55 0.37 0.83
0.34 0.56 0.38 0.82 0.91 0.35 0.55 0.41 0.85 0.92 0.37 0.57 0.40 0.85 0.91

Sedangkan target latih disusun menjadi matriks berukuran 1 x 15 seperti berikut ini

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

Keterangan: 1 = Adi, 2 = Budi, 3 = Candra, 4 = Dedi, 5 =  Erik

3. Langkah selanjutnya yaitu menuliskan coding pada script matlab seperti berikut ini
3.1 Coding untuk menuliskan data latih dan target latih pada matlab

% Mempersiapkan data latih dan target latih
data_latih = [0.35,0.59,0.19,0.36,0.58,0.40,0.61,0.20,0.38,0.57,0.33,0.55,0.18,0.38,0.56;...
     0.47,0.11,0.89,0.90,0.45,0.45,0.11,0.87,0.88,0.46,0.45,0.14,0.87,0.89,0.47;...
     0.88,0.90,0.54,0.39,0.80,0.80,0.90,0.56,0.35,0.82,0.85,0.90,0.55,0.37,0.83;...
     0.34,0.56,0.38,0.82,0.91,0.35,0.55,0.41,0.85,0.92,0.37,0.57,0.40,0.85,0.91];
target_latih = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
[~,N] = size(data_latih);

3.2 Selanjutnya membuat coding Jaringan Syaraf Tiruan Backpropagation dengan arsitektur 4-2-1 dan inisialisasi bobot awal secara acak. Pada pemrograman ini digunakan fungsi aktivasi sigmoid biner (logsig) pada hidden layer dan fungsi aktivasi linear (purelin) pada layer keluaran. Sedangkan fungsi pelatihan menggunakan metode gradien descent

% Pembuatan JST
net = newff(minmax(data_latih),[2 1],{'logsig','purelin'},'traingdx');
net.IW{1,1} = [-7.62,0.97,-2.60,-9.55;-5.83,-3.41,3.08,-4.44];
net.LW{2,1} = [-2.40,-2.67];
net.b{1,1} = [9.38;-2.7];
net.b{2,1} = 5.93;

3.3 Membuat coding untuk memberikan parameter-parameter yang mempengaruhi proses pelatihan jst seperti parameter jumlah epoch, target error, learning rate, momentum.

% Memberikan nilai untuk mempengaruhi proses pelatihan
net.performFcn = 'mse';
net.trainParam.goal = 0.01;
net.trainParam.show = 20;
net.trainParam.epochs = 1000;
net.trainParam.mc = 0.95;
net.trainParam.lr = 0.1;

3.4 Membuat coding untuk melakukan pelatihan jaringan

% Proses training
[net_keluaran,tr,Y,E] = train(net,data_latih,target_latih);

sehingga muncul tampilan seperti berikut:

Pada tampilan tersebut ditunjukkan bahwa target error (mse) tercapai pada epoch ke 506. Kita bisa melihat error (mse) yang dihasilkan pada setiap epoch dengan meng-klik tombol ‘performance’ sehingga muncul tampilan seperti berikut:

Sedangkan koefisien korelasi hasil pelatihan dapat dilihat dengan meng-klik tombol ‘regression’ sehingga diperoleh:

Nilai koefisien korelasi sebesar 0.99751 menunjukkan bahwa akurasi hasil proses pelatihan sangat baik.
3.5 Untuk melihat nilai-nilai hasil pelatihan, kita dapat menuliskan coding sbb:

% Hasil setelah pelatihan
bobot_hidden = net_keluaran.IW{1,1};
bobot_keluaran = net_keluaran.LW{2,1};
bias_hidden = net_keluaran.b{1,1};
bias_keluaran = net_keluaran.b{2,1};
jumlah_iterasi = tr.num_epochs;
nilai_keluaran = Y;
nilai_error = E;
error_MSE = (1/N)*sum(nilai_error.^2);

4. Langkah terakhir yaitu proses pengujian jaringan
4.1 Data uji disusun seperti ditunjukkan oleh matriks berikut

0.38 0.60 0.19 0.35 0.59
0.43 0.14 0.88 0.90 0.45
0.85 0.87 0.60 0.41 0.78
0.34 0.57 0.40 0.83 0.93

4.2 Dalam matlab kita dapat menuliskan coding sbb:

% Performa jaringan
data_uji = [0.38,0.60,0.19,0.35,0.59;...
    0.43,0.14,0.88,0.90,0.45;...
    0.85,0.87,0.60,0.41,0.78;...
    0.34,0.57,0.40,0.83,0.93];
hasil_uji = round(sim(net_keluaran,data_uji))

sehingga diperoleh hasil pada command window seperti berikut ini:

Hasil tersebut 100% sesuai dengan target uji yang telah diberikan sebelumnya. Pada contoh ini ditunjukkan bahwa JST dapat mengidentifikasi/ membedakan pola wajah seseorang berdasarkan ciri mata, hidung, mulut, dan telinga dengan baik.

Save

Save

Posted on August 24, 2015, in Data mining, Pengenalan Matlab, Pengenalan Pola and tagged , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 63 Comments.

  1. Malam mas, saya mw nanya nih
    saya punya data latih berukuran 15×15, error di matlab net.IW{1,1} = [-7.62,0.97,-2.60,-9.55;-5.83,-3.41,3.08,-4.44]; “net.IW{1,1} must be a 2-by-15 matrix.
    “. masalahnya diman ya mas
    Makasi mas

    • selamat malam juga vina
      proses inisialisasi bobot harus disesuaikan dg arsitektur jst
      misal jumlah neuron pada layer masukan adalah 15 dan jumlah neuron pada layer tersembunyi adalah 2, maka inisialisasi bobot net.{I,W} harus berukuran 2×15
      semoga membantu

  2. makasi mas,
    mw nanyak lg mas klo inisialisasi bobot hanya dengan hanya menulis net.{I,W} tanpa memberi nilai bisa ga?

    mas punya tutorial buat Local binary patterns (LBP) ga?

    makasi mas

    • sama sama vina
      pemrograman jst menggunakan matlab bisa dilakukan tanpa inisialisasi bobot
      jika proses itu tdk dilakukan, secara default, matlab akan menginisialisasi bobot awal secara acak
      materi mengenai lbp bisa dipelajari menggunakan buku jaringan syaraf tiruan & pemrogramannya menggunakan matlab karangan drs. jong jek siang

  3. Iya mas, makasi atas informasinya

  4. Mas, ketika memberi perintah :
    [~,N] = size(data_latih);

    kok muncul error :
    ??? [~,N] = size(data_latih);
    |
    Error: Expression or statement is incorrect–possibly unbalanced (, {, or [.

    Maksudnya Apa ya mas?

  5. ternyata solusinya mengganti (~) dengan “type” mas 🙂

  6. Mas Adi, bisa dijelaskan maksud dari parameter2 berikut:

    net.performFcn = ‘mse’;
    net.trainParam.goal = 0.01;
    net.trainParam.show = 20;
    net.trainParam.epochs = 1000;
    net.trainParam.mc = 0.95;
    net.trainParam.lr = 0.1;

    terus bagaimana membaca nilai korelasi R itu bagus/tidak? apakah R = 0,99xxx itu berarti akurasi yang bagus (99%) begitu ya Mas? mohon pencerahnnya mas..

    • 1. Performansi jaringan & error goal dinyatakan dlm nilai MSE
      2. MSE yg digunakan adl 0,01
      3. Nilai MSE akan ditampilkan setiap 20 epoch
      4. Nilai momentum adalah 0,95
      5. Nilai learning rate/laju pembelajaran adalah 0,1
      Akurasi dan korelasi beda mas
      akurasi nilainya 0-100%, sedangkan korelasi nilainya 0-1

    • terima kasih mas

  7. nanya lagi mas, apakah dalam setiap training, harus mencapai “performance goal met” ? kenapa kadang untuk data lain saya dapetnya “validation stop”, atau kadang berhenti pada maksimum epoch.. maksud dari itu semua apa ya mas?

    • Iterasi dalam jst akan berhenti ketika target error tercapai
      Jika target error belum tercapai, maka iterasi akan berhenti pada epoch maksimum

  8. assalamualaikum mas Adi,
    angka-angka yg didalam tabel dari no 1-15 itu didapat darimana ya (yang 0, ….) dan cara untuk mendapatkan angka2 itu bgaimna? terimakasih

    • Waalaikumsalam Annisa Amalia,
      nilai tersebut hanya contoh saja
      jika diaplikasikan ke dalam sistem pengenalan wajah yg sebenarnya, salah satu ciri yang bisa digunakan adalah ciri geometri misalnya jarak antara mata kiri dg mata kanan, mata (kiri/kanan) dg hidung, mata dg mulut, hidung dg mulut, dsb

    • gitu yah.. makasih mas

  9. Muwahhid Zain

    Assalamualaikum mas adi …
    Salam Kenal Mas Saya Muwahhid …

    Gini mas saya punya tugas seperti contoh yang di atas apalagi saya pemula mohon bisa memberikan materi atau refrensi untuk saya pelajari biar bisa mengerti alur dari Jaringan Syaraf Tiruan untuk Identifikasi Wajah ?

    Mohon bantuannya makasih banyak

  10. Muwahhid Zain

    Makasih mas atas bantuannya ….

  11. Mas adi data yang kita ambi di atas itu dari mana ?

    • data tersebut hanya contoh saja
      jika diaplikasikan ke dalam sistem pengenalan wajah yg sebenarnya, salah satu ciri yang bisa digunakan adalah ciri geometri misalnya jarak antara mata kiri dg mata kanan, mata (kiri/kanan) dg hidung, mata dg mulut, hidung dg mulut, dsb

  12. Muwahhid Zain

    Warning: NEWFF used in an obsolete way.
    > In obs_use at 17
    In newff>create_network at 126
    In newff at 101
    See help for NEWFF to update calls to the new argument list.

    Mas kalo seperti di atas ?

  13. Assalamualaikum Mas Adi, bisa dibahas tentang grafik hasil training seperti Regresi, dll?

  14. Mas adi, numpang nanya lagi mas,, untuk mencari ciri geometri misalnya jarak antara mata kiri dg mata kanan, mata (kiri/kanan) dg hidung, mata dg mulut, hidung dg mulut, dsb ?

    Itu bisa di dapatkan dimana yah ?

  15. mas, bagaimana membuat coding untuk mendiagnosis penyakit menggunakan jst backpropagation? trimakasih

  16. Assalamualaikum mas Adi, cara menentukan jumlah neuron di layer tersembunyi itu bagaimana ya?
    terimakasih

    • Waalaikumsalam annisa
      Jumlah neuron dalam lapisan tersembunyi ditentukan dg cara trial & error
      Jumlah neuron, jumlah layer tersembunyi, jenis fungsi aktivasi, jenis fungsi pelatihan, target error, jumlah epoch, laju pembelajaran, dan momentum dapat dijadikan sebagai variabel penelitian dalam merancang arsitektur jaringan syaraf tiruan

    • contoh kasusnya gimana ya mas, bingung saya…
      mohon penjelasan nya mas

  17. Mas saya mempunyai kendala
    Kasus saya pengenalan pada sidik jari
    Tetapi nilai output
    Untuk citra yang dikenali dan tidak dikenali adalah 0.999
    Semuanya mas.
    Mohon bantuannya mas

  18. Assalamualaikum mas. Kalau jst diaplikasikan ke gui bagaimana yah mas untuk proses training dan testingnya. Makasih

  19. salam ka, terima kasih postingannya sangat membantu 🙂
    saya mau tanya ka, kalau pada text mining, pada saat tf idf, data training dan data testingnya di gabung atau pisah ka? terima kasih

  20. Assalamualaikum.. mas salam kenal saya danial..
    saya nyoba pakai data yg diatas tetapi ketika proses epoch terhenti terus gradient = infinity, itu artnya apa ya mas ?

  21. Mas Adi, dasar untuk menentukan inisialisasi bobot berdasarkan apa ya ? Apa angkanya dikarang aja ? Lalu inisialisasi bobot yg bagaimana yg membuat akurasinya tinggi ? Terima kasih

    • inisialisasi bobot dilakukan secara acak karena kita tidak tahu berapa nilai bobot terbaik yang dapat menghasilkan nilai keluaran yang mendekati target
      bobot diinisialisasi dengan bilangan acak kecil yang terdiri dari bilangan positif dan negatif

  22. Mas Adi, di window Neural Network Performance, ada tulisan “Best Training Perfomance is 0.0099659”, angka 0.0099659 tsb menunjukan apa ya mas ? Thx

  23. % Mempersiapkan data latih dan target latih
    data_latih = [0.508,0.492,0.414,0.586,0.524,0.476,0.49,0.51,0.591,0.409,0.425,0.575,0.407,0.593,0.431,0.569,0.47,0.53,0.349,0.651,0.456,0.544,0.437,0.563;…
    0.632,0.368,0.857,0.143,0.766,0.234,0.667,0.333,0.655,0.345,0.455,0.545,0.5,0.5,0.429,0.571,0.408,0.592,0.766,0.234,0.594,0.406,0.623,0.373;…
    0.517,0.437,0.623,0.368,0.595,0.381,0.708,0.292,0.708,0.292,0.686,0.314,0.517,0.437,0.623,0.368,0.595,0.381,0.708,0.292,0.708,0.292,0.517,0.437;…
    0.703,0.6,0.707,0.605,0.802,0.701,0.807,0.7,0.806,0.609,0.703,0.6,0.707,0.605,0.802,0.701,0.807,0.7,0.806,0.609,0.874,0.762,0.707,0.605;…
    0.627,0.619,0.771,0.63,0.816,0.744,0.747,0.708,0.852,0.858,0.627,0.822,0.6095,0.671,0.626,0.558,0.784,0.683,0.689,0.519,0.699,0.731,0.755,0.605;…
    0.723,0.277,0.614,0.386,0.682,0.318,0.692,0.309,0.704,0.296,0.809,0.191,0.718,0.274,0.678,0.321,0.71,0.29,0.779,0.221,0.639,0.361,0.737,0.263];
    target_latih = [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0];
    [M,N] = size(data_latih);

    mas data di atas adalah data latih saya bias bantu ngga cara buat jst nya

  24. inputnya cuma ada 6 dan outputnya ada 2

  25. % Pembuatan JST
    net = newff(minmax(data_latih),[2 1],{‘logsig’,’purelin’},’traingdx’);
    net.IW{1,1} = [-7.62,0.97,-2.60,-9.55;-5.83,-3.41,3.08,-4.44];
    net.LW{2,1} = [-2.40,-2.67];
    net.b{1,1} = [9.38;-2.7];
    net.b{2,1} = 5.93;

    bias dijelasin ngga kode diatas.

  26. mas adi, input saya ada 21 dengan data latih 20ribuan, hasilnya 21x20ribuan, tapi dari baris pertama hinggah akhir sama semua ? mohon pencerahannya mas

  27. mas adi, Best Training Perfomance saya 67.3591, itu masalahnya dimana yah mas ??

  28. Mas Adi, kalo misalnya kita mau klasifikasi ke dalam 4 kelas, apa jumlah neuron outputnya harus 4 juga ? Atau cukup 1 aja ? Thx mas

    • Utk jumlah neuron pada layer keluaran bisa satu saja, bisa juga berjumlah 4
      Satu neuron jika target kelas diisi dg angka misal 1, 2, 3, 4
      Empat neuron jika target kelas diisi dg bilangan biner misal 0,0,0,0 ; 0,0,0,1 ; 0,0,1,0 dst

    • Nah, koding untuk nge-set jumlah neuron di ouput layer gimana ya mas ? Soalnya saya ga nemu2 caranya ngeset jumlah neuron di output layer. Thx mas

    • pada perintah
      net = newff(minmax(data_latih),[2 1],{‘logsig’,’purelin’},’traingdx’);
      angka [2 1] menyatakan bahwa ada 2 neuron pada hidden layer dan 1 neuron pada output layer
      angka2 tsb bisa kita ubah sesuai dg kebutuhan

  29. mas kalo pengen normalisasiin tapi secara otomatis dari matlab nya bisa ga?

  30. salam mas adi, kalau kode tersebut saya gunakan untuk pengenalan pola plat kendaraan bisa gak, kalau bisa apanya saja yang harus dimodifikasi?

  31. Mas sy mau bertanya. Saya punya kasus penentuan tarif kamar hotel dengan 13 variabel input dan target outputnya adalah harga kamar hotel sesuai tipe kamar dgn jumlah 4 (berarti ada 4 jenis output). Nah kalo pake JST backpropagation codingnya sama gak dgn yg 1 output target ato gmna mas? Mohon bantuannya, terima kasih 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: