Marktknigge oder gute Manieren im Minenfeld - Seite 21

 
grasn писал(а) >>

Wenn ich kreativ bin, muss ich wie ein Künstler aussehen! Aber wenn ich kodiere ... :о)))

PS: Serega, in MathCAD ist es fast monopenisch, aber in C++/FORTRAN ... wird anders sein, aber in MathCAD - um es gelinde auszudrücken nicht (für diesen speziellen Fall). Und wenn du mean verwendest, wird er noch schneller zählen, und wenn du z.B. corr verwendest, wird dein "schneller" Algorithmus turteln :o). Wie sie das machen, weiß ich nicht, aber was den Operator "Summieren" angeht, so ist er viel schneller als eine Schleife. Wenn Sie es nicht so haben, dann stellen Sie eine neue Version ein.

Ich hab's.

Vielen Dank für die Informationen!

 
Neutron >> :

Vergessen Sie nicht, dass es ratsam ist, all diese Dinge bei jedem Countdown zu unterrichten - es wird nicht einfach sein.

Jetzt habe ich es verstanden! Ich habe alle Ausschüsse auf einem Haufen gezählt...

Ich werde die Anzahl der Neuronen in der versteckten Schicht nicht erhöhen. Ich wüsste nicht, warum, es funktioniert auch mit zwei.

Wenn es Ihnen nichts ausmacht, würde ich gerne direkt zu ORO übergehen, da ich bereits ein zweischichtiges Netz fertig habe und es funktioniert (sogar mit Skalen "aus dem Hintergrund"), falls Interesse besteht - ich kann den Code auslegen.

 

Bislang habe ich Folgendes getan:



d = 17;

w = 17*3 + 4 = 55;

P = 4*55*55/17 = 712;

------------------------------------------------------------------------


Der ORO-Algorithmus ist bisher folgendermaßen aufgebaut (nur für die Gewichte der Ausgabeschicht):

// ----------------------------------------- ЭПОХА ---------------------------------------------------

for(int i = cikl; i > 2; i--)
{
out = OUT(i); // Получаем выход сетки
target = (Close[i]-Close[i+1])/Close[i+1];--------------------// Получаем целевое значение
delta = target - out;-----------------------------------------// Вычитаем выход сетки из целевого значения
pr = th(out);-------------------------------------------------// Вычисляем производную выходного сигнала
pr = 1 - pr*pr;-----------------------------------------------//

for(int n = 0; n < 4; n++)
{
Corr[n] += delta * pr * D2[n];--------------------------------// Вычисляем ошибку для каждого веса и суммируем её за всю эпоху
Norm[n] += Corr[n]*Corr[n];-----------------------------------// Считаем норму вектора коррекций для каждого веса за всю эпоху
}
}
// ------------------------------------- КОНЕЦ ЭПОХИ --------------------------------------------------

// ----------------------------------- КОРРЕКЦИЯ ВЕСОВ ------------------------------------------------

for(i = 0; i < 4; i++)

W2[i] += Corr[i]/MathSqrt(Norm[i]);



Es scheint zu funktionieren! Aber irgendetwas stimmt trotzdem nicht. Über 1000 Epochen hinweg sind alle Gewichte sehr klein geworden:

W2 [0] = 0,0876 W2 [1] = 0,0772 W2 [2] = -0,0424 W2 [3] = -0,05

Was habe ich übersehen und wie schiebe ich den Fehler jetzt auf die Eingangsgewichte?

 
Prival писал(а) >>

Sehen Sie sich die privaten Nachrichten an. Ich entschuldige mich dafür, dass ich hier schreibe, aber sie spiegeln oft nicht die Nachrichten wider.

Sergey, überprüfen Sie Ihre privaten Nachrichten.

zum Paralocus

Ich werde Ihnen zu einem späteren Zeitpunkt antworten.

Ich arbeite gerade an den Eingabedaten für den NS und da kam mir die Idee. Übrigens, warum haben Sie bei der Berechnung der Länge des Trainingsvektors die Anzahl der Gewichte mit 3 multipliziert? Soviel ich weiß, soll w=17+4 sein und das war's! Sie schulen jedes Ausschussmitglied mit seinem eigenen persönlichen Vektor...

 
Neutron >> :

...Übrigens, warum haben Sie bei der Berechnung der Länge des Trainingsvektors die Anzahl der Gewichte mit 3 multipliziert? Ich nehme an, Sie sollten w=17+4 haben und das war's! Sie schulen jedes Ausschussmitglied mit seinem eigenen persönlichen Vektor...

In diesem Fall ist der Eingangsvektor derselbe. Er wird bei jeder Auszählung einmal gelesen und dann von jedem Ausschussmitglied anhand seiner persönlichen "Punkte" (Gewichtung) "betrachtet" und beurteilt.

Natürlich kann sie für jedes Mitglied des Ausschusses einzeln gelesen werden, aber was nützt das, wenn das Ergebnis dasselbe ist? Der Eingabevektor besteht aus 16 aufeinanderfolgenden Inkrementen des Quotienten + einer einzelnen Eingabe.

А... Ich habe es verstanden! Ja, ich hatte früher zwei verschiedene Eingangsvektoren: der Kotir erhöht sich mit dt entsprechend der Fibo-Reihe - 2,3,5,8... und die andere durch Lukes Serie - 3,4,7,11... und es gab nur 2 Ausschussmitglieder. Damals las jedes Ausschussmitglied einen anderen Vektor, aber jetzt habe ich die Dinge vereinfacht, um mich auf das Verständnis der ORO zu konzentrieren. Der Vektor ist in diesem Fall also eins.

Könnten die Gewichte so stark gesunken sein, weil ich nur die zweite Schicht unterrichtet habe?

 

Nun, es stellt sich immer noch heraus: w=17+4 und jedes Mitglied hat die gleichen Vektoren.

Paralocus, hier ist meine Meinung. Wir wollen nicht voreilig sein und ein zweischichtiges nichtlineares Perspectron mit Nichtlinearitätsausgabe in MQL lösen und ein positives Ergebnis erhalten. Dann gehen Sie zu einem Ausschuss der Netze (falls erforderlich).

Was meinen Sie dazu?

 
Neutron >> :

Nun, es stellt sich immer noch heraus: w=17+4 und jedes Mitglied hat die gleichen Vektoren.

Paralocus, hier ist meine Meinung. Wir wollen nicht voreilig sein und ein zweischichtiges nichtlineares Perspectron mit Nichtlinearitätsausgabe in MQL lösen und ein positives Ergebnis erhalten. Dann gehen Sie zu einem Ausschuss der Netze (falls erforderlich).

Was sagen Sie dazu?

OK! Wir schalten also alle Kommissare und den Vorsitzenden aus. Eine Art von "Gangbusters-Kugeln"... -:) >> Los geht's.

P/S mit einer Ausnahme - der ersten

 

Na, dann mal los!

1. Finden Sie den Fehler am Ausgang des letzten Neurons: d2out=X[-1]-OUT2, (ich meine die Nummerierung als MQL und dies ist die "zukünftige" Anzahl).

2. neu berechnen unter Berücksichtigung der Nichtlinearität am Eingang: d2in=d2out*(1-OUT2^2)

3. der gleiche Fehler geht über das Axon an den Ausgang jedes Neurons der ersten Schicht! Nun ist dieser Fehler an den Ausgängen d1out und wir wiederholen das Verfahren (2) mit der Neuberechnung am Eingang: d1[1]in=d1out*(1-OUT1[1]^2) und auf die gleiche Weise für das zweite Neuron der versteckten Schicht.

 
Sind die Gewichte um den rechnerischen Fehler korrigiert, oder noch nicht?
 

Nein.

Berechnen Sie zunächst die Mikrokorrektur für jedes Gewicht: dw=in*din - Deltaregel - Multiplizieren Sie das Eingangssignal mit dem auf einen bestimmten Eingang angewandten Fehler. Dann fassen wir sie in einem separaten Summierer für jedes Gewicht über alle Stichproben des Trainingsvektors zusammen. Die Gewichte werden innerhalb einer Iteration der Trainingsepoche nicht korrigiert. Nur Mikrokorrekturen und ihre Quadrate werden (in einem weiteren Addierer) akkumuliert.

P.S.: Ich habe den Fehler im obigen Beitrag korrigiert. Die Ableitung wird wie folgt ermittelt: *(1-OUT2^2).

Grund der Beschwerde: