Artikel ini menjelaskan algoritma jaringan saraf buatan sederhana berdasarkan implementasi Java. Bagikan untuk referensi Anda, sebagai berikut:
Mari kita lihat diagram algoritma yang telah saya gambar:
2. Kategori Data
impor java.util.arrays; data kelas publik {double [] vektor; Divisi int; tipe int; public double [] getVector () {return vector; } public void setVector (double [] vector) {this.vector = vector; } public int getDimention () {divisi return; } public void setDimention (int divisi) {this.dimention = divisi; } public int getType () {type return; } public void setType (int tipe) {this.type = type; } data publik (vektor ganda [], int disimasi, tipe int) {super (); this.vector = vektor; this.dimentation = dimentation; this.type = type; } data publik () {} @Override Public String ToString () {return "data [vector =" + arrays.toString (vektor) + ", dimension =" + dimentation + ", type =" + type + "]"; }}3. Jaringan Saraf Buatan Sederhana
Paket cn.edu.hbut.chenjie; import java.util.arraylist; import java.util.list; import java.util.random; org.jfree.chart.chartfactory; import org.jfree.chart.chartframe; impor orgrfree.chrree.chrree.chrree.chrree.chrree org.jfree.data.xy.defaultxydataset; impor org.jfree.ui.refineryutilities; kelas publik Ann2 {private double eta; // tingkat pembelajaran private int n_iter; // vektor bobot w [] Jumlah waktu pelatihan Double <data> Latihan; // pelatihan Dataset dataset w0 W0 = 0; bobot; // vektor berat, yang panjangnya adalah pelatihan data dimensi +1, dalam hal ini data adalah 2 dimensi, sehingga panjangnya adalah 3 testsum int privat = 0; // Jumlah total data uji kesalahan int private = 0; // Jumlah kesalahan defaultxydataset xydataSet = new defaultxydataSet (); / *** Tambahkan data dari tipe yang sama ke bagan* @param type type* @param a Komponen pertama dari semua data* @param b Komponen kedua dari semua data*/ public void add (tipe string, ganda [] a, double [] b) {double [] [] Data = baru ganda [2] [a.length]; untuk (int i = 0; i <a.length; i ++) {data [0] [i] = a [i]; data [1] [i] = b [i]; } xydataset.addseries (type, data); } / *** Draw* / public void draw () {jFreechart JFreechart = chartFactory.createScatterplot ("latihan", "x1", "x2", xydataset); Chartframe frame = chartframe baru ("data pelatihan", jFreechart); frame.pack (); Refineryutilities.CenterFrameonscreen (Frame); frame.setVisible (true); } public static void main (string [] args) {ann2 ann2 = new ann2 (0,001.100); // Bangun daftar jaringan saraf buatan <data> Latihan = ArrayList baru <data> (); // Bangun set pelatihan // simulasikan secara manual 1.000 data pelatihan, baris pembagian adalah x2 = x1+0,5 untuk (int i = i secara manual simulasi 1.000 data pelatihan, lini pembagian adalah x2 = x1+0,5 untuk (int i = i secara manual = 0; Acak(); double x1 = rd.nextdouble (); // acak menghasilkan satu komponen ganda x2 = rd.nextDouble (); // acak menghasilkan komponen lain ganda [] da = {x1, x2}; // Menghasilkan data vektor data d = data baru (DA, 2, x2> x1+0,5? 1: -1); SUM1 = 0; // Rekam Tipe 1 Int Sum2 = 0; // Rekam Tipe-1 Nomor Catatan Pelatihan Untuk (int i = 0; i <latihan. lain jika (latihan.get (i) .getType () ==-1) sum2 ++; } double [] x1 = double baru [sum1]; ganda [] y1 = ganda baru [sum1]; ganda [] x2 = ganda baru [sum2]; ganda [] y2 = ganda baru [sum2]; int index1 = 0; int index2 = 0; for (int i = 0; i <sport.size (); i ++) {if (latihan. y1 [index1 ++] = latihan.get (i) .vektor [1]; } lain jika (latihan.get (i) .getType () ==-1) {x2 [index2] = latihan.get (i) .vektor [0]; y2 [index2 ++] = latihan.get (i) .vektor [1]; }} ann2.add ("1", x1, y1); ann2.add ("-1", x2, y2); ann2.draw (); ann2.input (latihan); // Masukkan pelatihan yang ditetapkan ke dalam jaringan saraf buatan Ann2.fit (); // latih ann2.showweigths (); // tunjukkan vektor berat // secara manual menghasilkan seribu data uji untuk (int i = 0; i <10000; i ++) {acak RD = new acak (); double x1_ = rd.nextdouble (); double x2_ = rd.nextdouble (); ganda [] da = {x1_, x2_}; Data tes = data baru (DA, 2, x2_> x1_+0,5? 1: -1); ann2.predict (tes); // test} system.out.println ("Test test" + ann2.testsum + "bit data, dengan" + ann2.error + "kesalahan bit, tingkat kesalahan:" + ann2.error * 1.0 /Ann2.testsum * 100 + "%"); } / ** * * @param eta laju pembelajaran * @param n_iter waktu pembelajaran komponen bobot * / public ann2 (ganda eta, int n_iter) {this.eta = eta; this.n_iter = n_iter; }/*** Masukkan pelatihan yang ditetapkan ke jaringan saraf buatan* @param latihan*/input void pribadi (daftar <data> latihan) {this.exercise = latihan; // simpan pelatihan set bobot = double baru [latihan. i = 1; = latihan.get (j) .type; // y int calculate_result = calculateresult (olahraga latihan.get (j) .getDivision (); // ΔW = η*(y-y ')*x bobot [k +1] += delta; // w = w+ΔW}}}} private int calculateresult (data data) {double z = w0 * x0; untuk (int i = 0; i <data.Dimention; i ++) z+= data.vector [i] * bobot [i+1]; //z=W0X0+W1x1++...+wmxm // Fungsi Aktivasi if (z> = 0) return 1; lain kembali -1; } private void showweigths () {for (double w: wights) system.out.println (w); } prediksi private void (data data) {int type = calculateresult (data); if (type == data.getType ()) {//system.out.println("precaution benar "); } else {//system.out.println("precaution error "); kesalahan ++; } testsum ++; }}Hasil Menjalankan:
-0.2200000000000000017-0.44168439828154530.442442202054685 Sebanyak 10.000 data diuji, dengan 17 kesalahan, tingkat kesalahan: 0,16999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Untuk informasi lebih lanjut tentang algoritma Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" Java "Tips Operasi Java"
Saya harap artikel ini akan membantu pemrograman Java semua orang.