Diskussion zum Artikel "Neuronale Netze leicht gemacht (Teil 5): Parallele Berechnungen mit OpenCL" - Seite 5

 
Dmitriy Gizlyk #:

Hallo, Sie brauchen die .cl-Datei nicht zu installieren. Du lädst sie einfach in das Hauptprogramm als String


Hallo!
Danke für die schnelle Antwort. Ich denke, das eigentliche Problem ist, dass mein System OpenCL nicht unterstützt. Bedeutet das, dass ich mit dieser Serie von hier an nicht mehr weitermachen kann?


Edit(SOLVED): Obwohl es scheint, dass AMD die Unterstützung von OpenCL aufgegeben hat, gibt es ein kostenloses Microsoft OpenCL und OpenGL Compatibility Pack und es kompiliert jetzt.

 

Guten Tag Dmitry, vielen Dank für Ihre Veröffentlichungen, die mir sehr geholfen haben, meine Kenntnisse in der Entwicklung zu verbessern. Für Ihre Ratschläge wäre ich Ihnen sehr dankbar. Ich studiere gerade den Artikel über Multithreading (#5). Ich habe versucht, eine kompilierte Datei aus den Anhängen auszuführen, sie läuft nicht und bringt das ganze Terminal zum Absturz. Ich habe versucht, sie aus den Quellen neu zu kompilieren, das Ergebnis ist das gleiche, was mich zu der Annahme bringt, dass es nicht an den Quellen liegt. Ich habe versucht, es auf dem Testgerät laufen zu lassen: es stürzt ab, wenn die CNet::backPropOCL-Methode in Zeile 1486 aufgerufen wird (neuron.calcHiddenGradients(nextLayer.At(0));), und dort bereits bei einer vordefinierten Funktion aus dem OpenCL-Katalog (CLExecute(kernel_handle,work_dim,work_offset,work_size)). Das Interessanteste ist, dass es keinen Fehler in den Protokollen gibt, aber der Tester stürzt auch ab. Können Sie mir sagen, woran das liegen kann? Vielen Dank!

 
Aleksandr Seredin Multithreading (#5). Ich habe versucht, eine kompilierte Datei aus den Anhängen auszuführen, sie läuft nicht und bringt das ganze Terminal zum Absturz. Ich habe versucht, sie aus den Quellen neu zu kompilieren, das Ergebnis ist das gleiche, was mich zu der Annahme bringt, dass es nicht an den Quellen liegt. Ich habe versucht, es auf dem Tester laufen zu lassen: es stürzt ab, wenn die CNet::backPropOCL-Methode in Zeile 1486 aufgerufen wird (neuron.calcHiddenGradients(nextLayer.At(0));), und dort bereits bei einer vordefinierten Funktion aus dem OpenCL-Katalog (CLExecute(kernel_handle,work_dim,work_offset,work_size)). Das Interessanteste ist, dass es keinen Fehler in den Protokollen gibt, aber der Tester stürzt auch ab. Können Sie mir sagen, woran das liegen kann? Vielen Dank!
Guten Tag, Alexander.
Wenn ich es richtig verstehe, stürzt es ab, wenn das OpenCL-Programm läuft. Versuchen Sie, das Programm im Debug-Modus laufen zu lassen und schauen Sie sich die Größen der übertragenen Puffer an. Vielleicht liegt der Fehler in der Arrayüberschreitung im OpenCL-Programm.
 

Hallo Tobias,

Kopiere einfach die .cl Datei (aus den Downloads) und füge sie in den "include" Ordner im Meta Editor ein. Der Compiler wird sie finden.

Vielen Dank

 

In der Methode "bool CNeuron::feedForward(CLayer *prevLayer)", der Datei "NeuroNet.mqh", gibt es eine Zeile:

"outputVal=activationFunction(MathMin(MathMax(sum,-18),18));"

Ich verstehe nicht, warum das Ergebnis der Aktivierungsfunktion von -18 bis 18 geht, sollte es nicht von -1 bis 1 oder von 0 bis 1 gehen?

 
Gexon (MathMin(MathMax(sum,-18),18));"

Ich verstehe nicht, warum das Ergebnis der Aktivierungsfunktion von -18 bis 18 geht, sollte es nicht von -1 bis 1 oder von 0 bis 1 gehen?

Dies schränkt das Argument der Aktivierungsfunktion ein, nicht ihren Wert. Dies wurde hinzugefügt, damit der Gradient der Aktivierungsfunktion nicht auf Werte nahe 0 getrieben wird.

 
Dmitriy Gizlyk Marktbedingungen zu bewerten.

Können Sie mir bitte sagen, ob recentAverageSmoothingFactor = 10000 auf 2 Jahren basiert?

365 Tage * 2 Jahre * 24 Stunden = 17.520 Stundenkerzen (Stichprobenlänge).


Ich verwende eine Stichprobe von 1 Jahr, dann muss ich auf 8.760 reduzieren (365 * 24 = 8.760)?

In Tests springt dForecast von 0 auf 23, und der Fehler ist 0,32 und bleibt konstant, ist das normal oder liegt es daran, dass recentAverageSmoothingFactor falsch ist? 😀

 

Hallo Dimitri,

Ich liebe deine Artikel und ich fange an, daran zu arbeiten.

Wo ist die CBuffer-Klasse? Ich kann es nicht finden.

Beste grüße,

Benjamin

 
Benjamin Doerries # :

Hallo Dimitri,

Ich liebe deine Artikel und ich fange an, daran zu arbeiten.

Wo ist die CBuffer-Klasse? Ich kann es nicht finden.

Beste grüße,

Benjamin

Egal, ich habe die Lösung gefunden, es in CBufferFloat zu ändern, wie von Ihnen in anderen Artikeln beschrieben :)

 
Während des Betriebs habe ich andere OpenCl-Geräte, die nicht in Betrieb sind. Kann ich mehrere Geräte für paralleles Rechnen verwenden ?