تصف هذه المقالة خوارزمية شبكة عصبية اصطناعية بسيطة تستند إلى تنفيذ Java. شاركه للرجوع إليه ، على النحو التالي:
دعونا نلقي نظرة على مخطط الخوارزمية التي رسمتها:
2. فئة البيانات
استيراد java.util.arrays ؛ بيانات الطبقة العامة {double [] vector ؛ تقسيم int ؛ نوع int ؛ public double [] getVector () {return vector ؛ } public void setVector (double [] vector) {this.vector = vector ؛ } public int getDimention () {return Division ؛ } public void setDimention (int division) {this.dimention = division ؛ } public int gettype () {return type ؛ } public void setType (int type) {this.type = type ؛ } البيانات العامة (double [] vector ، int dimentation ، int type) {super () ؛ this.vector = متجه ؛ this.dimentation = dimentation ؛ this.type = type ؛ } البيانات العامة () {} Override public string toString () {return "data [vector =" + arrays.toString (vector) + "، dimension =" + dimentation + "، type =" + type + "]" ؛ }}3. الشبكة العصبية الاصطناعية البسيطة
package cn.edu.hbut.chenjie ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد java.util.random ؛ استيراد org.jfree.chart.chartfactory ؛ استيراد org.jfree.chart.chartframe ؛ استيراد org.jfree.chart.jfreechart ؛ org.jfree.data.xy.defaultxydataSet ؛ استيراد org.jfree.ui.refineryutabilities ؛ الفئة العامة ann2 {private double eta ؛ // معدل التعلم الخاص بـ int n_iter ؛ // vector double x [] عدد الأوقات التدريبية الخاصة بالبيانات <Data> التدريب ؛ DataSet double w0 = 0 ؛ الأوزان ؛ // متجه الوزن ، الذي يبلغ طوله هو بُعد بيانات التدريب +1 ، في هذه الحالة ، تكون البيانات أبعادًا ، وبالتالي فإن الطول هو 3 اختبار int الخاص = 0 ؛ // إجمالي عدد بيانات الاختبار الخاصة int inter = 0 ؛ // عدد الخطأ defaultxydataset xydataset = new defaultxydataset () ؛ / *** أضف بيانات من نفس النوع إلى المخطط* نوع param نوع* param a المكون الأول لجميع البيانات* param b المكون الثاني لجميع البيانات*/ void public add (نوع السلسلة ، double [] a ، double [] b) {double [] [] data = new double [2] [A.Length] ؛ لـ (int i = 0 ؛ i <a.length ؛ i ++) {data [0] [i] = a [i] ؛ البيانات [1] [i] = b [i] ؛ } xydataset.addseries (النوع ، البيانات) ؛ } / *** draw* / public void draw () {jfreechart jfreechart = chartfactory.createscatterplot ("تمرين" ، "x1" ، "x2" ، xydataset) ؛ ChartFrame Frame = ChartFrame جديد ("بيانات التدريب" ، Jfreechart) ؛ frame.pack () ؛ مصفاة. frame.setVisible (صحيح) ؛ ) عشوائي()؛ double x1 = rd.nextDouble () ؛ // توليد مكون واحد مزدوج x2 = rd.nextDouble () ؛ // قم بإنشاء مكون آخر مزدوج [] da = {x1 ، x2} ؛ sum1 = 0 ؛ // سجل النوع 1 int sum2 = 0 ؛ // سجل السجل 1 رقم السجل التدريبي لـ (int i = 0 ؛ i <extrect.size () ؛ i ++) {if (تمرين. آخر إذا (تمرين. } double [] x1 = new double [sum1] ؛ Double [] y1 = new double [sum1] ؛ Double [] x2 = New Double [sum2] ؛ Double [] y2 = new double [sum2] ؛ int index1 = 0 ؛ int index2 = 0 ؛ لـ (int i = 0 ؛ i <extrect.size () ؛ i ++) {if (تمرين. y1 [index1 ++] = تمرين. get (i) .vector [1] ؛ } آخر إذا (تمرين. y2 [index2 ++] = تمرين. get (i) .vector [1] ؛ }} ann2.add ("1" ، x1 ، y1) ؛ Ann2.Add ("-1" ، x2 ، y2) ؛ ann2.draw () ؛ ann2.input (تمرين) ؛ // أدخل التدريب المعيّن في الشبكة العصبية الاصطناعية ann2 double x1_ = rd.nextDouble () ؛ double x2_ = rd.nextDouble () ؛ Double [] da = {x1_ ، x2_} ؛ اختبار البيانات = بيانات جديدة (DA ، 2 ، x2_> x1_+0.5؟ 1: -1) ؛ ann2.predict (test) ؛ // test} system.out.println ("total test" + ann2.testsum + "data data ، with" + ann2.error + "خطأ بت ، معدل الخطأ:" + ann2.error * 1.0 /ann2.testsum * 100 + "٪") ؛ } / ** * * * param eta معدل التعلم * param n_iter أوقات التعلم المكون للوزن * / public Ann2 (double eta ، int n_iter) {this.eta = eta ؛ this.n_iter = n_iter ؛ }/*** أدخل مجموعة التدريب إلى الشبكة العصبية الاصطناعية* @param تمرين*/إدخال void الخاص (قائمة <data> التمرين) {this.exercise = exercise ؛ // حفظ الأوزان مجموعة التدريب = جديد [تمرين. = 1 ؛ تمرين. تمرين (j) .getDivision () ؛ // ΔW = η*(y-y ')*x الأوزان [k +1] += Delta ؛ // w = w+ΔW}}}} private int calculateresult (بيانات البيانات) {double z = w0 * x0 ؛ من أجل (int i = 0 ؛ i <data.dimention ؛ i ++) z+= data.vector [i] * أوزان [i+1] ؛ //z=w0x0+w1x1+...+wmxm // وظيفة التنشيط إذا كانت (z> = 0) إرجاع 1 ؛ عودة أخرى -1 ؛ } private void showweigths () {for (double w: winitions) system.out.println (w) ؛ } private void preprice (بيانات البيانات) {int type = calculateresult (data) ؛ if (type == data.gettype ()) {//system.out.println("precaution صحيح ") ؛ } else {//system.out.println chrate error error ") ؛ خطأ ++ ؛ } testsum ++ ؛ }}نتائج التشغيل:
-0.220000000000000000017-0.44168439828154530.4444444202054685 تم اختبار ما مجموعه 10،000 بيانات ، مع 17 خطأ ، معدل الخطأ: 0.16999999999999999999999999999999999
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.