Ich habe ein reguläres ANN-BP-Setup mit einer Einheit auf der Eingangs- und Ausgangsebene und vier Knoten mit Sigmoid versteckt aufgebaut. Es ist eine einfache Aufgabe, die lineare f(n) = n
mit n im Bereich 0-100 anzunähern.
PROBLEM : Ungeachtet der Anzahl der Ebenen, der Einheiten in der ausgeblendeten Ebene oder unabhängig davon, ob ich die Knotenwerte binäre Werte verwende oder nicht, lernt man f (n) = Durchschnitt (Datensatz) wie folgt:
Code ist in JavaScript als Proof of Concept geschrieben. Ich habe drei Klassen definiert: Net, Layer und Connection, wobei Layer ein Array von Input-, Bias- und Output-Werten ist. Connection ist ein 2D-Array aus Gewichten und Delta-Gewichten. Hier ist der Layer-Code, in dem alle wichtigen Berechnungen stattfinden:
%Vor%Die Hauptfunktionen feedForward und backProp sind wie folgt definiert:
%Vor%Der Verbindungscode ist ziemlich einfach:
%Vor%Und meine Aktivierungsfunktionen und Derivate sind wie folgt definiert:
%Vor%Und Konfiguration JSON für das Netzwerk ist wie folgt:
%Vor%Vielleicht kann Ihr erfahrenes Auge das Problem mit meinen Berechnungen erkennen?
Ich habe den Code nicht ausgiebig angeschaut (weil es viel Code zum Anschauen gibt, müsste später dafür mehr Zeit brauchen und ich bin nicht 100% ig mit JavaScript vertraut). Wie auch immer, ich glaube, Stephen hat einige Änderungen an der Berechnung der Gewichte vorgenommen, und sein Code scheint korrekte Ergebnisse zu liefern, also würde ich empfehlen, sich das anzusehen.
Hier sind ein paar Punkte, die nicht unbedingt die Korrektheit von Berechnungen betreffen, aber trotzdem helfen können:
Erstens ... Ich mag diesen Code wirklich. Ich weiß sehr wenig über NNs (gerade erst angefangen) so entschuldigen Sie meine fehlende wenn überhaupt.
Hier ist eine Zusammenfassung der Änderungen, die ich vorgenommen habe:
Der Konfigurationsabschnitt sieht jetzt so aus: