В этой статье описывается простой алгоритм искусственной нейронной сети, основанный на реализации Java. Поделитесь этим для вашей ссылки, следующим образом:
Давайте посмотрим на диаграмму алгоритма, которую я нарисовал:
2. Категория данных
Import java.util.arrays; открытый класс данных {double [] Vector; Int Division; int type; 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; } public Data (Double [] Vector, Int dimentation, int type) {super (); this.Vector = vector; this.dentimation = dimentation; this.type = type; } public Data () {} @Override public String toString () {return "data [ecector =" + arrays.tostring (ecector) + ", dimension =" + dimentation + ", type =" + type + "]"; }}3. Простая искусственная нейронная сеть
Пакет cn.edu.hbut.chenjie; import java.util.arraylist; import java.util.list; import java.util.random; import org.jfree.chart.chartfactory; import org.jfree.chart.chartframe; импорт org.jfree.chart.jfreechart; org.jfree.data.xy.DefaultXYDataset;import org.jfree.ui.RefineryUtilities;public class ANN2 { private double eta;//learning rate private int n_iter;//Weight vector w[]Number of training times private List<Data> exercise;//Training dataset private double w0 = 0;//Threshold private double x0 = 1;//Fixed value private double[] Weews; // Вестер Вес, длина которого является обучающим измерением данных +1, в данном случае данные составляют 2 измерения, поэтому длина составляет 3 private int testsum = 0; // Общее количество тестовых данных Private int error = 0; // Количество ошибки defaultxydataset xydataset = new DefaulxyDataset (); / *** Добавить данные одного и того же типа в диаграмму* Тип типа @param* @param a Первый компонент всех данных* @param b Второй компонент всех данных*/ public void add (type, double [] a, double [] b) {double [] [] data = new Double [2] [A.Length]; for (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 = new Chartframe («Данные обучения», JFreechart); Frame.pack (); RefineryUtility.centerFrameonScreen (Frame); Frame.SetVisible (true); } public static void main (string [] args) {ann2 ann2 = new ann2 (0,001,100); // Создание списка искусственной нейронной сети <data> ganize = new ArrayList <tata> (); // Создание тренировочного набора // вручную имитации 1000 тренировочных данных, разделение x2 = x1+0,5 для (int i = 0; 10000; Случайный(); Double x1 = rd.nextDouble (); // Случайное генерирование одного компонента Double x2 = rd.nextDouble (); // Случайное генерирование другого компонента двойного [] da = {x1, x2}; // генерировать данные вектора данных d = новые данные (DA, 2, x2> x1+0.5 = 0; // Запись тип 1 int sum2 = 0; // Запишите номер учебной записи типа-1 для (int i = 0; i <examer.size (); i ++) {if (gency.get (i) .gettype () == 1) sum1 ++; иначе if (gency.get (i) .gettype () ==-1) sum2 ++; } double [] x1 = new Double [sum1]; double [] y1 = new Double [sum1]; Double [] x2 = новый двойной [sum2]; double [] y2 = new Double [sum2]; int index1 = 0; int index2 = 0; for (int i = 0; i <examer.size (); i ++) {if (gency.get (i) .gettype () == 1) {x1 [index1] = jure.get (i) .vector [0]; y1 [index1 ++] = упражнение.get (i) .vector [1]; } else if (gency.get (i) .getType () ==-1) {x2 [index2] = gency.get (i) .vector [0]; y2 [index2 ++] = упражнение.get (i) .vector [1]; }} ann2.add ("1", x1, y1); ann2.add ("-1", x2, y2); ann2.draw (); ann2.input (упражнение); // Введите обучение в искусственной нейронной сети ann2.fit (); // train ann2.showweights (); // Показать вектор веса // вручную генерировать одну тысячу тестовых данных для (int i = 0; i <000000; i ++) {случайный rd = new Random (); 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 + "битовые данные с" + ann2.error + "ошибка бита, частота ошибок:" + ann2.error * 1,0/ann2.testsum * 100 + "%"); } / ** * * * @param eta Sceent * @param n_iter Время обучения веса * / public ann2 (double eta, int n_iter) {this.eta = eta; this.n_iter = n_iter; }/*** Введите обучающий набор в искусственную нейронную сеть* @param упражнение*/private void ввод (список <ta Data> упражнение) {this.exercise = упражнение; // Сохранить веса тренировочных наборов = новый двойной [упражнение. = 1; Упражнение.get (j) .type; // y int calculate_result = calculateresult (gency.get (j)); // y 'double delta0 = eta * (real_result - calculate_result); // Рассчитывать пороговое обновление w0 += delta0; // Упражнение. Get (j) .getDivision (); // ΔW = η*(y-y ')*x Вес [k +1] += delta; // w = w+Δw}}}} private int calculateresult (data data) {double z = w0 * x0; для (int i = 0; i <data.dimention; i ++) z+= data.vector [i] * Weews [i+1]; //z=w0x0+w1x1+...+wmxm // Функция активации if (z> = 0) return 1; иначе вернуть -1; } private void showweigths () {for (double w: wews) system.out.println (w); } private void прогноз (данные данных) {int type = calculaterEsult (data); if (type == data.gettype ()) {//system.out.println(" proceurent rolut "); } else {//system.out.println("precaution error "); ошибка ++; } testsum ++; }}Результаты работы:
-0.2200000000000000017-0.44168439828154530.442444202054685 A total of 10,000 data were tested, with 17 errors, error rate: 0.16999999999999999999999999999999999998%
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.