Dieser Artikel beschreibt einen einfachen Algorithmus für künstliche neuronale Netzwerk, der auf der Java -Implementierung basiert. Teilen Sie es für Ihre Referenz wie folgt weiter:
Schauen wir uns das Algorithmus -Diagramm an, das ich gezeichnet habe:
2. Datenkategorie
import Java.util.Arrays; öffentliche Klassendaten {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 gettType () {return type; } public void setType (int type) {this.type = type; } öffentliche Daten (double [] vector, int dimentation, int type) {super (); this.Vector = vector; this.dimentation = dimpation; this.type = Typ; } public data () {} @Override public String toString () {return "data [vector =" + arrays.toString (vector) + ", Dimension =" + dimentation + ", type =" + type + "]"; }}3.. Einfaches künstliches neuronales Netzwerk
Paket 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.data.xy.defaultxydataset; import org.jfree.ui.RefineryUtilities; öffentliche Klasse Ann2 {private double eta; // Lernrate privat int n_iter; // Gewichtsvektor w [] Anzahl der Schulungen. Gewichte; // Gewichtsvektor, dessen Länge Trainingsdatendimension +1 ist, in diesem Fall sind die Daten 2 Dimensionen, sodass die Länge 3 private int testsum = 0; // Gesamtzahl der Testdaten private int error = 0; // Anzahl der Fehler defaultxydataset xydataset = new DefaultXyDataset (); / *** Daten des gleichen Typs zum Diagramm hinzufügen* @param Typtyp* @param A Die erste Komponente aller Daten* @param b Die zweite Komponente aller Daten*/ public void add (String -Typ, double [] a, double [] b) {double [] [] data = new double [2] [A.Length]; für (int i = 0; i <A.Length; i ++) {Daten [0] [i] = a [i]; Daten [1] [i] = b [i]; } xydataset.addSeries (Typ, Daten); } / *** zeichnen* / public void draw () {jfreechart jfreechart = chartfactory.createScatterplot ("Übung", "x1", "x2", xydataset); Chartframe Fram = new chartframe ("Trainingsdaten", jfreechart); Frame.Pack (); RefineryUtilities.CenterFrameOnscreen (Frame); Frame.SetVisible (True); } public static void main (String [] args) {Ann2 Ann2 = New Ann2 (0,001.100); // Konstruieren Sie eine künstliche neuronale Netzwerkliste <daten> Übung = NeuarrayList <Daten> (); // Konstruieren Sie ein Trainingssatz // manuell simulieren 1.000 Trainingsdaten, die Trennlinie is x2 = x1 x1+0.5 für (int i = 0). Zufällig(); Double x1 = rd.nextDouble (); // zufällig eine Komponente doppelte x2 = rd.nextDouble (); // zufällig generieren Sie eine andere Komponente doppelte [] da = {x1, x2}; // Datenvektordaten d = neue Daten (DA, 2, x2> x1+0.5? sum1 = 0; // Datensatztyp 1 int sum2 = 0; // Datensatz-1-Trainingsnummer für (int i = 0; i <Übung.size (); i ++) {if (Übung.get (i) .GetType () == 1) sum1 ++; sonst if (Übung.get (i) .Getype () ==-1) sum2 ++; } double [] x1 = new Double [sum1]; double [] y1 = neues double [sum1]; double [] x2 = neues double [sum2]; double [] y2 = neues double [sum2]; int index1 = 0; int index2 = 0; für (int i = 0; i <spiel.size (); i ++) {if (Übung.get (i) .GetType () == 1) {x1 [index1] = Übung.get (i) .Vector [0]; y1 [index1 ++] = Übung.get (i) .Vector [1]; } else if (Übung.get (i) .GetType () ==-1) {x2 [index2] = Übung.get (i) .Vector [0]; y2 [index2 ++] = Übung.get (i) .Vektor [1]; }} Ann2.add ("1", x1, y1); Ann2.Add ("-1", x2, y2); Ann2.Draw (); Ann2.Input (Übung); // Geben Sie das Training ein, das in das künstliche neuronale Netzwerk ann2.fit (); // train Ann2.showweigths (); // Zeigen Sie den Gewichtsvektor // manuell eintausend Testdaten für (int i = 0; i <10000; i ++) {zufällige rd = neue random (); double x1_ = rd.nextDouble (); double x2_ = rd.nextDouble (); double [] da = {x1_, x2_}; Datentest = neue Daten (DA, 2, x2_> x1_+0,5? 1: -1); Ann2.Predict (Test); // Test} System.out.println ("Gesamttest" + Ann2.TestSum + "Bitdaten, mit" + Ann2.Error + "Bitfehler, Fehlerrate:" + Ann2.Error * 1.0 /Ann2.TestSum * 100 + "%"); } / ** * * @param eta Lernrate * @param n_iter Gewichtskomponente Lernzeiten * / public Ann2 (Double ETA, int n_iter) {this.eta = eta; this.n_iter = n_iter; }/*** Geben Sie das Training ein, das in das künstliche neuronale Netzwerk eingestellt ist = 1; Übung.get (j) .Typ; // y int calculate_result = calculateresult (Übung.get (j)); // y 'double delta0 = eta * (real_result - calculate_result); // Threshold -Update W0 += Delta0; // Threshold -Gewichtszeitpunkte [0] = W0;//// // update w [0] für (int k <0]. Übung.get (j) .getDivision (); // ΔW = η*(y-y ')*x Gewichte [k +1] += Delta; // w = w+ΔW}}}} private int calculateresult (Datendaten) {double z = w0 * x0; für (int i = 0; i <data.dimention; i ++) z+= data.Vector [i] * Gewichte [i+1]; //z=w0x0+w1x1+...+Wmxm // Aktivierungsfunktion if (z> = 0) return 1; sonst return -1; } private void showWeigths () {für (double W: Gewichte) system.out.println (w); } private void Predict (Datendaten) {int type = calculateresult (data); if (type == data.gettType ()) {//system.out.println("Precateure korrekt "); } else {//System.out.println("Precillainer -Fehler "); Fehler ++; } Testsum ++; }}Auslaufergebnisse:
-0.2200000000000000017-0.44168439828154530.442444202054685 A total of 10,000 data were tested, with 17 errors, error rate: 0.16999999999999999999999999999999999998%
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.