20 November 2017

Delta Learning Rule

Assalamu'alaikum.
Ketemu lagi dengan saya.....semoga netter semuanya dalam keadaan sehat walafiat dan selalu dalam lindungan-Nya. Amin ya robbal'alamin.

Langsung aja guys, kali ini akan dibahas masalah Delta Learning Rule, yang merupakan bagian dari expert system untuk pengambilan keputusan berdasarkan data-data yang sudah ada beserta target yang sudah ditentukan.  Didalamnya terdapat proses learn untuk mencapai target yang telah ditentukan.  Proses learn tersebut akan terus dilakukan sampai dengan jarak errors dengan target semakin kecil.
Delta learning rule ini hanya terdiri dari unit input dan unit output atau dalam istilah lain dikenal sebagai single layer.

Pada gambar 1. terlihat Jaringan Syaraf Tiruan Delta Learning Rule.

Gambar 1. Delta Learning Rule
Pada jaringan ini digunakan topologi feedforward dengan metode supervised (terawasi).  Jaringan feedforward adalah jaringan hubungan antar node yang tidak mempunyai perputaran (loop).  Jaringan feedforward ini biasa akan merespon input dengan cepat.
Metode supervised adalah metode dimana suatu metode yang hasilnya sudah diketahui  secara pasti yang mana hasil tersebut diberikan kepada jaringan pada saat terjadi proses pelatihan sehingga jaringan tersebut bisa menyesuaikan bobotnya untuk mencocokkan hasil pelatihannya dengan target.

Algoritma Delta Learning Rule

Saat umpan maju (feedforward), setiap unit input (Xi) akan menerima sinyal input dan akan menyebarkan sinyal tersebut pada tiap unit output. Kemudian setiap unit output (Yj) juga akan menghitung aktivasinya (yj) untuk menghasilkan respon terhadap input yang diberikan jaringan.
Saat proses pelatihan (training), setiap unit output membandingkan aktivasinya (yj) dengan nilai target (desired output) untuk menentukan besarnya error. Perhitungan error tersebut digunakan untuk menentukan stop condition.

Untuk selengkapnya, notasi-notasi yang akan digunakan pada algoritma pelatihan yaitu :
X          Data training untuk input
             X = (x1, …, xi, …, xn)
t           Data training untuk output (target/ desired output)
             t = (t1, …, tk, …, tm)
α          Learning rate, yaitu parameter yang mengontrol perubahan bobot selama pelatihan. Jika
learning rate besar, jaringan semakin cepat belajar, tetapi hasilnya kurang akurat. Learning rate biasanya dipilih antara 0 dan 1.
Xi         Unit input ke-i. untuk unit input, sinyal yang masuk dan keluar pada suatu unit dilambangkan dengan variable yang sama, yaitu xi.
Yj               Unit output ke-j. sinyal input ke Yj dilambangkan y_inj. sinyal output(aktivasi) untuk Yj
dilambangkan dengan yj.
wij        Bobot antara unit input ke-I dan unit output ke-j.
Emax     Error maksimum untuk menentukan stop condition.

E          Jumlah error sekarang setiap putaran pelatihan.

Secara detail,  step-step pelatihan Delta Learning Rule adalah sebagai berikut :
Step 0. Inisialisasi α (learning rate) dan Emax. Nilai Emax dan α harus lebih besar dari 0.
Step 1. Inisialisasi nilai bobot w dan error E diset 0.
Step 2. Jika stop condition masih belum terpenuhi, jalankan step3-9.
Step 3. Untuk setiap data training, lakukan step 4-8.

Umpan Maju (feedforward):
Step 4. Setiap unit input (Xi, i = 1,...,n) menerima sinyal input xi dan menyebarkan sinyal tersebut pada seluruh unit pada unit output. Perlu diketahui bahwa input xi yang dipakai di sini adalah input training data yang sudah diskalakan. Pertama, input yang mungkin dipakai dalam sistem dicari nilai terendah dan tertingginya. Kemudian, skala yang digunakan tergantung dari fungsi aktivasinya.
Jika yang dipakai adalah fungsi Sigmoid Biner yang mempunyai harga terendah = 0 dan harga tertinggi = 1, maka nilai input terendah juga dianggap = 0 dan nilai tertinggi dianggap = 1. Nilai-nilai diantaranya bervariasi antara 0 dan 1.
Sedangkan bila yang digunakan adalah fungsi Sigmoid Bipolar, maka range nilainya juga bervariasi mulai -1 sampai dengan 1.
Step 5. Setiap unit output (Yj, j = 1,...,m), akan menjumlahkan sinyal-sinyal input yang sudah berbobot, termasuk biasnya,
y_inj

dan memakai fungsi aktivasi yang telah ditentukan untuk menghitung sinyal output dari unit output yang bersangkutan

Pembaharuan Bobot (adjustment) dan Bias:
Step 6. Menghitung perubahan bobot dari setiap unit input (Xi = 1,...,n) ke unit output (Yj, j = 1,...,m).
Step 7. Setiap unit output (Yi, j = 1,...,m) akan memperbaharui bias dan bobotnya dari setiap unit input (i = 1,...,n),

Perhitungan Total Error:
Step 8. Menghitung error dengan menambahkan error yang sekarang ke variabel E.
Step 9. Memeriksa stop condition.
Jika E < Emax, maka stop condition terpenuhi dan pelatihan selesai.
Jika E > Emax, maka E diset 0 dan putaran pelatihan baru dimulai lagi dengan kembali ke step 3.

Contoh aplikasi Delta Learning Rule
Contoh aplikasi delta learning rule pada fungsi logika AND

 
 
GAMBAR 2. Struktur Jaringan untuk AND problem

Pada gambar tersebut dapat dilihat :
Bobot diinisialisasi dengan nilai random (missal : w1 = 0.1; w2 = -0.2).  Pada fungsi AND, inputnya adalah 00, 01, 10, 11 dan output yang diharapkan 0, 0, 0, 1.   E (error) diinisialisasi 0. Ditentukan α = 0.1 dan  E max = 0.1.
Iterasi 1.
Input1
(x1)
Input2
(x2)
Target Output
(t)
W1*x1
W2*x2
y_in
Y(Output)
Weight error
(y-t)
W1 BARU
W2 BARU
0
0
0
0
0.
0
0.5
-0.5
0.1
-0.2
0
1
0
0
-0.2
-0.2
0.45
-0.45
0.1
-0.245
1
0
0
0.1
0
0.1
0.53
-0.53
0.047
-0.245
1
1
1
0.047
-0.245
-0.198
0.45
0.55
0.102
-0.19

Pada tabel di atas, bahwa pada perhitungan w1*x1 dan w2*x2, nilai w1 dan w2 diambilkan dari nilai w1 baru dan w2 baru baris sebelumnya dari kolom sebelah kanan.

Kemudian bobot diperbaharui menjadi :

Pada pasangan data training pertama :
w1 = w1 + α(y1-t1)x1 = 0.1 +0.1 x (-0.5) x 0 = 0.1
w2 = w2 + α(y2-t2)x2 = -0.2 +0.1 x (-0.5) x 0 = -0.2
Pada kasus ini, y1 dan y2 adalah Y (karena output hanya 1 yaitu Y)

Pada pasangan data training kedua :
Nilai w1 dan w1 diambilkan dari hasil perhitungan pada pasangan training pertama
w1 = w1 + α(y1-t1)x1 = 0.1 +0.1 x (-0.45) x 0 = 0.1
w2 = w2 + α(y2-t2)x2 = -0.2 +0.1 x (-0.45) x 1 = -0.245

Pada pasangan data training ketiga :
Nilai w1 dan w1 diambilkan dari hasil perhitungan pada pasangan training kedua
w1 = w1 + α(y1-t1)x1 = 0.1 +0.1 x (-0.53) x 1 = 0.047
w2 = w2 + α(y2-t2)x2 = -0.245 +0.1 x (-0.53) x 0 = -0.245

Pada pasangan data training keempat :
Nilai w1 dan w1 diambilkan dari hasil perhitungan pada pasangan training ketiga
w1 = w1 + α(y1-t1)x1 = 0.047 +0.1 x (0.55) x 1 = 0.102
w2 = w2 + α(y2-t2)x2 = -0.245 +0.1 x (0.55) x 1 = -0.19

E = ½ ((-0.5)2 + (-0.45)2 + (-0.53)2 + (0.55)2) = ½(0.5359) = 0.26795
Karena E>Emax maka dilanjutkan ke iterasi kedua dan begitu seterusnya sampai Emax

E adalah Total Error = 1/2((y1-t1)2 + (y2-t2)2 + (y3-t3)2 + (y4-t4)2

Untuk file excel buat latihan berikut link nya :

Delta Learning Rule - Excel


10 November 2017

Lingkaran - drawOval - fillOval

Assalamu'alaikum
Guys, kali ini saya akan melanjutkan tentang grafik dasar.  Akan dibahas tentang drawOval.

g.drawOval(x, y, dx, dy);
Gambar 1. Lingkaran

Lingkaran adalah sebuah gambar dengan titik pusat pada lokasi tertentu dan berkeliling lingkaran dengan jarak yang sama dari titik pusat (jari-jari).  Kalau dibuat dalam bentuk gambar dapat diilustrasikan pada gambar 1.

Sedangkan untuk oval atau elips, jari-jari rx tidak sama dengan jari-jari ry, sehingga dapat diilustrasikan seperti pad gambar 2.
Gambar 2. Oval atau Elips

Pada komputer grafik dengan java, maka sebagai acuannya adalah bukan titik pusat, akan tetapi titik pojok kanan atas dari kotak lingkarannya.  Sebagai ilustrasi dapat dilihat pada gambar 3.

Gambar 3. Oval dan acuan membuatnya

Pada gambar 3. terlihat bahwa pojok kiri atas (lingkaran kuning) menjadi titik sentral untuk membuat oval.  Dimana harus dimasukkan titik koordinat pada perintah g.drawOval(x, y, dx, dy);
Lalu apa arti dari dx, dy ?   
dx adalah panjang garis searah sumbu x (diukur dari titik terjauh pada keliling oval sudut 0 derajat s/d sudut 180) atau disebut sebagai diameter sumbu x.
dy adalah panjang garis searah sumbu y (diukur dari titik terjauh pada keliling oval sudut 90 derajat s/d sudut 270) atau disebut sebagai diameter sumbu y.  

Penjelasan di atas dapat diilustrasikan seperti pada gambar 4.

Gambar 4. dx dan dy

Untuk menunjukkan bagaimana perintah programnya, bisa dilihat sebagai berikut :


package penggunaanawt;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Drawoval extends JPanel {
public void paint(Graphics g) {
 {     g.setColor(Color.blue);
        g.drawOval(100, 100, 50, 150);
   }
}
 public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new Drawoval());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500,500);
    frame.setVisible(true);
  }}

Gambar 6. Output running program dr listing di atas
Dari listing program di atas, dapat dijelaskan bahwa perintah g.drawOval(100, 100, 50, 150); menunjukkan bahwa oval akan dimulai pada pojok kiri atas (100,100) dengan diameter searah sumbu x = 50 dan diameter searah sumbu y = 150.  
Gambar hasil running programnya pasti akan oval lonjong ke arah bawah, karena diameter searah sumbu y lebih panjang daripada diameter searah sumbu x.
Hasilnya dapat dilihat pada gambar 6.

Jadi tingkat kelonjongannya ke arah mana itu sangat bergantung dengan dx dan dy.  Kalau nilai dx lebih besar  daripada dy, maka oval akan lonjong ke kanan (mendatar), tetapi kalu dy lebih panjang dari pada dx nya, maka oval akan memanjang ke bawah.

Perintah terakhir kali ini adalah 

g.fillOval(x, y, dx, dy);

Dimana perintah tersebut akan membentuk oval atau elips dengan arsiran didalamnya (bukan hanya frame atau rangka saja).
Sedangkan aturan yang dipakai sama persis dengan aturan pada g.drawOval(x, y, dx, dy); cuma berbeda efeknya. sebagai ilustrasi dapat dilihat pada gambar 7 perbedaan dari  kedua perintah tersebut.

Gambar 7. Perbedaan drawOval dan fillOval

Pada gambar 7 tersebut terlihat perbedaan pada arsirannya, pada perintah g.drawOval(100,100,150,50); diperoleh oval yang di bagian atas dengan tidak ada arsirannya, sedangkan perintah g.fillOval(100,160,150,50); diperoleh oval yang dibagian bawah (warna hijau),dimana terdapat arsirannya penuh warna hijau.

Sehingga dengan perintah itu semua saudara bisa membuat gambar muka dengan raut muka yang berbeda-beda ekspresinya.  Misalnya coba buatlah program untuk tampilan seperti pada gambar 8.

Gambar 8. Untuk latihan


Sekian ya....udah capek, udah lapar, udah ngantuk....udah....udah..... ya udahlah.....
Wassalamu'alaikum.

drawLine dan drawPolyline (Garis)

Assalamu'alaikum
Halo guys, kali ini masih berkisar tentang garis, tetapi untuk perintah :

  1. g.drawLine(x1,y1,x2,y2);
  2. g.drawPolyline(xs, ys, JumlahTitik);
Ok, mari kita mulai dari yang pertama :

1. g.drawLine(x1,y1,x2,y2);

Adalah perintah untuk membuat sebuah garis yang dimulai dari titik awal sampai dengan titik akhir.
Pada perintah g.drawLine(x1,y1,x2,y2); dapat dijelaskan bahwa ini adalah perintah asli untuk membuat garis.  Koordinat (x1,y1) adalah titik awal garis dan (x2,y2) adalah titik akhir garis.

Contoh listing program untuk membuat sebuah garis adalah sebagai berikut :

package penggunaanawt;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Garis extends JPanel {
public void paint(Graphics g) {
   
g.setColor(Color.blue); 
g.drawLine(50,50, 150, 50); // (x1,y1,x2,y2)

}
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new Garis());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500,400);
    frame.setVisible(true);
}}

Dari listing program di atas, dapat ditampilkan hasil eksekusinya pada gambar 1.

Gambar 1. Tampilan Hasil Program (garis warna biru)
Sehingga arah garis dan panjang garis bisa dirubah dengan merubah koordinat-koordinat tersebut.  Misalnya, bila sebuah garis akan dibuat dimulai dari titik (10,10) dan panjang garis tersebut adalah 200 ke arah bawah, maka dapat dijelaskan sebagai berikut :

  1. Arah garis ke bawah, berarti sumbu x tidak berubah (tetap, tidak bergerak kekanan ataupun ke kiri atau disebut tidak ada perubahan atau delta x=0.  dimana delta x tersebut diperoleh dengan cara mengurangi nilai x2 dengan nilai x1), sedangkan sumbu y berubah sepanjang 200 (delta y=200).  Karena delta =200, maka y2=y1+delta y 
  2. Bahwa garis tersebut arahnya lurus ke bawah dengan panjang garis=200 (delta y)
Setelah itu, saudara-saudara bisa mencoba membuat gambar dengan menggunakan perintah tersebut, misalnya membuat gambar 2.

Gambar 2. Untuk latihan


2. g.drawPolyline(xs, ys, JumlahTitik);

Adalah perintah membuat beberapa garis terus menerus bersambungan. Format perintahnya adalah sebagai berikut :

g.drawPolyline(xs, ys, JumlahTitik);

dimana :
(xs, ys) adalah koordinat titik-titik yang akan dirangkai garisnya.  
JumlahTitik adalah banyaknya titik yang akan dibuat garisnya.  Sebuah garis mempunyai 2 ujung, dimana ujung-ujung tersebut merupakan titik-titik yang disebutkan pada koordinat (xs, ys).
Nilai-nilai (xs, ys) diperoleh dari data tabel matrik titik yang harus dituliskan pada bagian sebelum perintah ini dituliskan. 

Contoh listing program untuk perintah ini adalah sebagai berikut :


package penggunaanawt;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PolyLine extends JPanel {

  public void paint(Graphics g) {
      int[] xs = {25, 75, 125, 85, 125, 75, 25, 65, 25};
      int[] ys = {50, 90, 50, 100, 150, 110, 150, 100, 50};
      g.drawPolyline(xs, ys, 9);
    }   
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new PolyLine());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200,200);
    frame.setVisible(true);
  }
}



Hasil keluaran dari listing tersebut dapat dilihat pada gambar 3.

Gambar 3. Keluaran dari listing program di atas

Gambar 2, diperoleh dengan cara mengeksekusi listing program berikut :


      int[] xs = {25, 75, 125, 85, 125, 75, 25, 65, 25};
      int[] ys = {50, 90, 50, 100, 150, 110, 150, 100, 50};
      g.drawPolyline(xs, ys, 9);

Terlihat ada 9 pasang koordinat, dimana 2 koordinat (awal dan akhir) mempunyai nilai yang sama (untuk garis yang tertutup).

Untuk latihan juga saudara bisa menggunakan gambar 2 sebagai acuan.


04 November 2017

Titik dan Garis

Assalamu'alaikum .......
Halo guys, kali ini saya akan posting tentang elemen dasar citra/tampilan pada monitor/layar/display alat-alat digital.  Tentunya kaitannya dengan kommputer grafik.
Elemen dasar dari citra adalah titik, dimana biasa sering didengar oleh telinga kita ada kata-kata piksel, dot, resolusi dst.
Garis dan citra apapun pada komputer atau media penampil digital selalu ditampilkan dalam kumpulan titik-titik.
Berkaitan dengan hal tersebut, maka perintah dasar pada pemrograman di java titik direpresentasikan dalam perintah dasar g.fillRect, seperti terlihat pada penggalan program berikut :
 
    g.fillRect(100, 100, 200, 100 ); // (x, y, width x, width y) rectangle dg block

Dari perintah tersebut, terlihat ada format baku yang harus diketahui, yaitu :

    g.fillRect(x, y, width x, width y );

dimana :
x dan y adalah koordinat sebelah kiri atas tempat titik akan ditempatkan
width x adalah lebar titik searah sumbu x
width y adalah lebar titik searah sumbu y

Pada perintah di atas, maka akan diperoleh tampilan seperti pada gambar 1.
Gambar 1

Terlihat bahwa titik sudut kiri atas adalah (100,100) dan panjang searah sumbu x adalah 200 dan tinggi searah sumbu y adalah 100.

Kalau misalnya x width dan y width tidak seperti pada penggalan program di atas, maka tampilan akan berbeda. 
Misalnya akan dibuat garis lurus ke kanan sepanjang 400 dengan ketebalan y=1 (y width = 1), maka perintahnya adalah sebagai berikut :
 g.fillRect(100, 100, 400, 1 );
Maka tampilannya akan menjadi seperti terlihat pada gambar 2.

Gambar 2. 

Pada gambar 2 terlihat bahwa garisnya tipis.  Hal itu terjadi karena perintah :
g.fillRect(100, 100, 400, 1 );
Sehingga dapat diperoleh kesimpulan bahwa kalau diinginkan membuat garis, maka ketebalannya bisa diatur sesuai dengan keinginan dengan memanipulasi x width dan y width.

Kalau dikehendaki garisnya tegak lurus, maka bisa diperoleh dengan cara  : ketebalan searah sumbu x harus = 1 agar diperoleh kesan menjadi garis yang tipis. Sedangkan arah ke bawah bisa diperoleh dengan cara memberikan perintah pada y width dengan nilai sesuai dengan panjang yang diinginkan.  Misalkan panjangnya pengin 400 point ke bawah, maka perintahnya menjadi

        g.fillRect(100, 100, 1, 400 ); terlihat pada nilai y width = 400 dan x width =1 .

Dengan perintah tersebut, maka akan diperoleh tampilan seperti pada gambar 3.

Gambar 3
Terlihat pada gambar 3, bahwa garisnya adalah ke bawah dimulai dari titik (100,100) sepanjang 400 point (titik).

Perintah perintah tersebut hanya bisa dipakai untuk membuat garis lurus ke arah horizontal dan vertikal saja.  Sehingga apabila diinginkan garis miring maka perintah yang dipakai adalah dengan memberikan perintah titik berulang-ulang dengan memindahkan koordinat awal peletakan yang berbeda-beda.
ohhhh....terus bagaimana untuk membuat garis miring ? kan tidak asyik kalau tidak ada yang miring !!!........OMG......bagaimana ya ?
Jangan takut dan jangan khawatir, saya sudah sediakan amunisi jawabannya. dan amunisi tersebut tidaklah membuat kita kaget dan terkejut, karena sudah biasa........eh......biasa ya ?     iya....biasa ngga ngerti !!!! ....xiixixixixii



Misalnya awal titik adalah (100,100), maka titik berikutnya adalah (101,101), berikutnya (102,102), begitu seterusnya, maka akan menjadi titik yang miring dari kiri atas ke kanan bawah.
Gambar 5.

Pada gambar 5, terlihat bahwa garis miring tersebut diperoleh dengan cara menghitung delta x (perubahan searah sumbu x) dan delta y (perubahan searah sumbu y).
Terlihat bahwa delta x = 100 dan delta y = 100.  Artinya bahwa gambar tersebut miring ke kanan bawah 45 derajat (karena delta x = delta y).

Gambar 5 diperoleh dengan membuat titik berulang-ulang, dengan memindahkan posisi titik awalnya (g.fillRect(100, 100, 1, 400 );
Perintah yang diberikan untuk menghasilkan gambar 5 adalah sebagai berikut :




int jumlahtitik = 0;
    while (jumlahtitik <=100){
        g.fillRect(100+jumlahtitik , 100+jumlahtitik, 1, 1);
        jumlahtitik++; } //counter naik

Lihat proses perintah pengulangannya.

Kalau diinginkan garis miring ke kiri bawah, apa yang harus dilakukan ?
Gambar 6



Adiiiiii....pung pusing laiii.......

Garis miring ke kiri bawah, itu artinya bahwa nilai delta x berkurang dan nilai delta y bertambah.
Coba lihat gambar 6.

Terlihat bahwa arah sumbu x nya adalah ke kiri bukan ke kanan (artinya nilai x berkurang) dan arah sumbu y ke bawah bukan ke atas (artinya nilai y bertambah)
Untuk memperoleh gambar 6, perintah yang diberikan adalah sebagai berikut :

int jumlahtitik = 0;
    while (jumlahtitik <=100){
        g.fillRect(200-jumlahtitik , 200+jumlahtitik, 1, 1);
        jumlahtitik++; } //counter naik

Coba perhatikan perintah berikut :

       g.fillRect(200-jumlahtitik , 200+jumlahtitik, 1, 1);

Pada sisi koordinat x, nilainya dikurangi sedangkan nilai koordinat y nya ditambah, seperti uraian saya sebelumnya.

oooh........begitulah ternyata.......

Jadi and so......tidak ada yang sulitkan .....silahkan berkreasi.
Wassalamu'alaikum