Da liest doch tatsächlich jemand meine alten Codes

.
Ich mach's mal kurz: Ich denke, mein alter Code oben
ist falsch und hier ist die richtige Version:
Code: Alles auswählen
Procedure.f Berechne_Fehler() ;Rückwärts 1, gibt den MaximalFehler zurück
Protected MaxFehler.f ;um zu erkennen, wann der maximale Fehler innerhalb der Toleranz #Toleranz liegt
For z = 1 To #a ;Fehler für 2. Gewichtsschicht
OFehler(z) = (SollOutputs(z) - Outputs(z)) ;fülle Fehler-Array der Outputschicht
; If Abs(OFehler(z)) > Abs(MaxFehler) ;Maximaler Fehler herausfinden
; MaxFehler = OFehler(z)
; EndIf
Next
For z1 = 1 To #v ;für jedes Neuron der verb. Schicht
Fehler1.f = 0 ;mit 0 initialisieren
For z2 = 1 To #a ;Fehler 1 berechnen
Fehler1 = Fehler1 + OFehler(z2) * VNeurons(z1) * Gewichte2(z1, z2) ;Fehler aufsummieren
Next
VFehler(z1) = Fehler1 ;fülle Fehlerarray der verb. Schicht
Next
ProcedureReturn MaxFehler
EndProcedure
Man beachte nebst deinen oben genannten Entfernungen der
komischen Terme das Einfügen des Faktors "VNeurons(z1)"
in der verschachtelten For-Schleife. Das ist die vorgezogene
Delta-Regel der "Gewichte_anpassen()"-Prozedur. Damit habe
ich weitaus bessere Resultate.
Disclaimer: Ich weiss nicht, was ich mir damals gedacht habe
und woher ich die Informationen bezogen habe. Deshalb ist
diese Korrektur mit Vorsicht zu geniessen, da sie aus reiner
Intuition folgt. Wobei ich hoffe, dass meine Intuition mit den
Jahren besser wurde
Ich hoffe, das hilft dir ein wenig.
greetz
remi