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

 

Neuer Artikel Neuronale Netze leicht gemacht (Teil 5): Parallele Berechnungen mit OpenCL :

Wir haben bereits einige Arten von Implementierungen neuronaler Netze besprochen. In den betrachteten Netzwerken werden die gleichen Operationen für jedes Neuron wiederholt. Ein logischer weiterer Schritt ist die Nutzung der parallelen Berechnung, die die moderne Technologie bietet, um den Lernprozess des neuronalen Netzwerks zu beschleunigen. Eine der möglichen Implementierungen wird in diesem Artikel beschrieben.

Wir haben die Technologie ausgewählt. Jetzt müssen wir über den Prozess der Aufteilung der Berechnungen in Threads entscheiden. Erinnern Sie sich an den Algorithmus des vollständig verbundenen Perceptrons bei einem feed-forward Durchlauf? Das Signal bewegt sich sequentiell von der Eingabeschicht zu den versteckten Schichten und dann zur Ausgabeschicht. Es macht keinen Sinn, für jede Schicht einen Thread zuzuweisen, da die Berechnungen sequentiell durchgeführt werden müssen. Die Berechnung einer Schicht kann erst beginnen, wenn das Ergebnis der vorherigen Schicht vorliegt. Die Berechnung eines einzelnen Neurons in einer Schicht hängt nicht von den Berechnungsergebnissen der anderen Neuronen in dieser Schicht ab. Das bedeutet, dass wir für jedes Neuron separate Threads zuweisen und alle Neuronen einer Schicht zur parallelen Berechnung schicken können.  

Vollständig verbundenes Perzeptron

Wenn man auf die Operationen eines Neurons heruntergeht, könnte man die Möglichkeit der Parallelisierung der Berechnung der Produkte der Eingangswerte mit ihren Gewichtskoeffizienten in Betracht ziehen. Die weitere Summierung der resultierenden Werte und die Berechnung des Wertes der Aktivierungsfunktion werden jedoch in einem einzigen Thread zusammengefasst. Ich habe mich entschieden, diese Operationen in einem einzigen OpenCL-Kernel unter Verwendung von Vektorfunktionen zu implementieren.

Autor: Dmitriy Gizlyk

 

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 :)

Grund der Beschwerde: