Kurze Beschreibung
Mit der schnellen Entwicklung des Internets ist A (AI) B (BigData) C (Cloud) derzeit zur zentralen Entwicklungsrichtung geworden. Wenn die drei tief kombiniert sind, ist AI der zentralste Teil davon. Wenn also jeder in der zukünftigen Gesellschaft Programmierung lernen muss, dann ist künstliche Intelligenz die Technologie, die sie beherrschen müssen (Technologieentwicklung ist sehr schnell).
In diesem Artikel wird Java eingeführt und verwendet, um ein einfachste Perceptron -Netzwerk zu implementieren, ohne sich mit der Formelableitung zu verfangen, um Ihnen Ideen für das Lernen neuronaler Netzwerke zu bieten und ein grobes Verständnis für neuronale Netzwerke zu vermitteln.
Perzeptron -Netzwerkmodellanalyse
Schauen Sie sich zuerst ein Bild an
Wenn Sie ein wenig an neuronalen Netzwerken interessiert sind, müssen Sie mit diesem Bild vertraut sein. Dieses Bild ist ein Strukturdiagramm von Neuronen
X1 ~ xm repräsentiert Eingabe, W1 ~ WM repräsentiert das synaptische Gewicht, σ repräsentiert den summierenden Knoten, die Aktivierungsfunktion repräsentiert die Aktivierungsfunktion und geben dann ein Ergebnis aus. Der spezifische Prozess ist
Wenn das Neuron die Eingabe erhält, wird jede Eingabe mit dem Gewicht seines relativen Pfades multipliziert. Wenn der summierende Knoten erreicht ist, wird das Ergebnis des summierenden Knotens auf z gesetzt:
z = x1 * w1 + x2 * w2 + x3 * w3 + ...... + xm * wm
Geben Sie dann Z in die Aktivierungsfunktion übergeben (hier nennen wir die Aktivierungsfunktion f) für die binäre Mustererkennung:
Wenn f (x)> e, y = 1Else y = -1e ist der Schwellenwert y ist das Klassifizierungsergebnis
Hier ist zu sehen, dass, wenn der Wert von f (x) größer ist als der Schwellenwert, die Klassifizierung y = 1 erhalten wird und umgekehrt y = -1
Hinweis: Im Vergleich zu der Reaktion, die durch die Stimulation biologischer Neuronen angezeigt wird, hemmt das Neuron, wenn die Stimulation innerhalb eines akzeptablen Bereichs liegt, die Stimulation (y = -1), und wenn es den Bereich überschreitet, wird es angeregt (y = 1) und die Wasserscheide dieses Bereichs ist die Schwelle (E) (E) und die Wasserscheide dieses Bereichs (e) ist die Schwelle (e).
Studie
Wir fanden heraus, dass dieses neuronale Netzwerk keine Bedeutung hat, wenn das Gewicht und die Schwelle festgelegt sind. Daher haben wir das Konzept des Lernens eingeführt und das neuronale Netzwerk das Gewicht und die Schwelle durch das Lernen ändern, damit die Genauigkeit der Mustererkennung dynamisch korrigiert werden kann. Dies ist die Essenz des maschinellen Lernens.
Wie lernt man also? Bevor wir es verwenden, müssen wir diesem Netzwerk eine Reihe von Beispieldaten für dieses Netzwerk bereitstellen (das hier mit dem Lehrermodus lernen wird).
Wenn wir Trainingsdaten X eingeben und Mustererkennung y erhalten, werden das Gewicht und der Schwellenwert dieses Netzwerks angepasst. Bitte beachten Sie die Formel zur Anpassung. μ repräsentiert die Lernrate (Korrekturrate), und die Aktualisierung stellt die Notwendigkeit dar, korrigiert zu werden:
update = μ * (yi - y ') update = (f (x) - y') mct wi += update * xii = 1e += update
Wenn das Ergebnis der Perzeptron -Klassifizierung der richtigen Klassifizierung entspricht, wird Update = 0 und das Netzwerk nicht angepasst. Wenn es nicht gleich der richtigen Klassifizierung ist, werden alle Gewichte (W) und Schwellenwerte (e) angepasst
Das obige ist der einfachste Lernprozess für Perzeptrons, die ich eingeführt habe:
Geben Sie Daten ein -> Fassen Sie zusammen, um Z-> Warten Sie die Aktivierungsfunktion, um auf die Klassifizierungsergebnisse zu warten -> Klassifizierungsergebnisse stimmen nicht mit den richtigen Ergebnissen überein. Passen Sie das Netzwerk an
Lassen Sie uns dieses einfache neuronale Netzwerk implementieren
Java -Code -Implementierung
Was ich hier implementiert habe, ist zu lernen, die positiven und negativen Ganzzahlen durch neuronale Netzwerke zu erkennen. Definieren Sie zunächst eine Klasse, die zunächst eine Wahrnehmung definiert.
/*** Erstellt von Cimzzz am 12.12.17. **/public class Perceptron {/*** Lernrate*/privat final float LearnRate; / *** Anzahl der Lernzeiten*/ Private Final INT StudyCount; / *** Schwelle*/ privat float e; / *** Gewicht* Da nur ein Eingang die positive und negative Ganzzahl bestimmen, gibt es hier nur ein Gewicht, und mehrere Eingänge können auf ein Array eingestellt werden*/ privat float w; / *** Richtige Rate für jedes Lernen*/ privat float [] korrektzen; /// ** * Konstruktor initialisiert die Lernrate, die Anzahl der Lernzeiten, das Gewicht und den Schwellenwert auf 0 * @param Learnrate Lernrate (Wertebereich 0 <Learnrate <1) * @param StudyCount Anzahl der Lernzeiten */ public Perceptron (float lernrate, int studyCount) {this.Learnrate = lernrate; this.studyCount = StudyCount; this.e = 0; this.w = 0; this.correctrate = neuer float [StudyCount]; } / *** Lernfunktion, Beispiele ist ein zweidimensionales Array, das Eingabedaten und Klassifizierungsergebnisse enthält. für (int i = 0; i <studyCount; i ++) {int errorCount = 0; für (int [] Beispiel: Muster) {float update = LearnRate * (Beispiel [1] -Predict (Beispiel [0])); // Gewicht und Schwelle aktualisieren w += update * Beispiel [0]; e += update; // Berechnen Sie die Fehlernummer, wenn (update! = 0) Fehlercount ++; } // Berechnen Sie die Richtigkeit dieses Lernens korrekt [i] = 1 - Fehlercount * 1.0F /Samplelength; }} / *** Summefunktion, simulieren Sie die Summe Summierung der Eingabedaten des Knotens. } / *** Aktivieren Sie die Funktion, den Richter, indem Sie das Ergebnis Z und den Schwellenwert E* @param Num -Eingabedaten summieren 1: -1; }/*** Druckgenauigkeit*/public void printcorrecrektrate () {für (int i = 0; i <StudyCount; i ++) System.out.printf ("Ergebnis des Lernens bei %d-> %.2f %%/n", i +1, korrigieren [i]* 100); }}Schreiben Sie dann die Funktion, die die Trainingsdaten generiert
/*** Trainingsdaten generieren* @return Trainingsdaten*/privat static int [] [] genstudydata () {// Hier nehmen wir eine Ganzzahl zwischen -100 und 100 und setzen Sie sie auf dem Modus y = 1, ansonsten y = -1 int [] [] data = new int [201] [2]. für (int i = -100, j = 0; i <= 100; i ++, j ++) {data [j] [0] = i; Daten [j] [1] = i> = 0? 1: -1; } Daten zurückgeben; } /*** Trainingsdaten generieren* @return Trainingsdaten* /privat static int [] [] GenstudyData2 () {// Hier nehmen wir eine Ganzzahl zwischen 1 ~ 250 und setzen Sie es in den Modus y = 1, andernfalls y = -1 int [] [] data = new int [250] [2]. für (int i = 1, j = 0; i <= 250; i ++, j ++) {data [j] [0] = i; Daten [j] [1] = i> = 125? 1: -1; } Daten zurückgeben; }Schließlich die Hauptfunktion
public static void main (String [] args) {// Die Lernrate und die Schulungszeiten können hier manuell gemäß der Situation Perceptron Perceptron = New Perceptron (0,4F, 500) angepasst werden; Perceptron.Fit (Genstudydata ()); Perceptron.printcorrectrate (); System.out.println (Perceptron.PREDICT (-1)); System.out.println (Perceptron.PREDICT (126)); }Sie können es testen
Einschränkung
Dieses neuronale Netzwerk von Perceptron ist relativ einfach und für linear geteilte Daten geeignet, wie beispielsweise positive und negative Zahlen in eindimensionaler und zweidimensionaler Koordinaten-Quadrant-Klassifizierung; Daten, die nicht korrekt klassifiziert werden können, können nicht klassifiziert werden, z. B. die Suche nach Primzahlen usw.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.