Eine einfache Convolutional neural network code
Ich bin daran interessiert, convolutional neural networks (CNNs) als ein Beispiel der sehr umfangreichen Anwendung, die geeignet ist für die Beschleunigung mit REKONFIGURIERBARER hardware (also sprich FPGA)
Damit zu tun, dass ich untersuchen muss, eine einfache CNN-code, den ich verwenden können, um zu verstehen, wie Sie umgesetzt werden, wie werden die Berechnungen in den einzelnen Ebenen statt, wie die Ausgabe jeder Schicht zugeführt und an den Eingang der nächsten. Ich kenne mich mit dem theoretischen Teil (http://cs231n.github.io/convolutional-networks/)
Aber, ich bin nicht daran interessiert, die Ausbildung der CNN, ich will eine komplette, autarke CNN-code, der die vor-geschult sind und allen gewichten und biases Werte bekannt sind.
Ich weiß, dass es viele CNN-Bibliotheken, d.h. Caffe, aber das problem ist, dass es keine triviale Beispiel-code selbst enthalten ist. sogar für die einfachste Caffe Beispiel "cpp_classification" viele Bibliotheken sind aufgerufen, die Architektur des CNN wird ausgedrückt .prototxt Datei, andere Typen von Eingaben wie .caffemodel und .binaryproto beteiligt sind. openCV2 Bibliotheken aufgerufen wird, zu. es gibt Schichten und Ebenen der Abstraktion und verschiedene Bibliotheken arbeiten zusammen und produzieren die Klassifikation Ergebnis.
Ich weiß, dass diese Abstraktionen sind notwendig, um zu generieren, eine "brauchbare" CNN Umsetzung, aber für ein hardware-Mensch, braucht einen bare-bone-code zu studieren, das ist zu viel "un- " Verwandte arbeiten".
Meine Frage ist: Kann jemand mich führen, in einem einfachen und in sich geschlossenen CNN-Implementierung, die kann ich anfangen?
- Sie können auch daran interessiert sein, das Lesen meiner Umfrage auf Papier FPGA-Beschleuniger für CNN, die Bewertungen von 75+ Papiere. Viele dieser Autoren haben veröffentlicht Ihre source-code, so finden Sie viele CNN-Implementierungen, um loszulegen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nur empfehlen,tiny-cnn. Es ist einfach, leicht (z.B. header-only) und CPU, während gleichzeitig mehrere Schichten, Häufig verwendet in der Literatur (wie beispielsweise die Bündelung Schichten, dropout-Schichten oder die lokale Antwort Normalisierung layer). Dies bedeutet, dass Sie leicht zu erforschen, die eine effiziente Implementierung dieser Schichten in C++, ohne Kenntnisse in CUDA und Graben durch den I/O-und framework-code, wie erforderlich, durch Rahmenbedingungen wie Caffe. Die Umsetzung fehlen einige Kommentare, aber der code ist noch einfach zu Lesen und zu verstehen.
Den bereitgestellten MNIST Beispiel ist ganz einfach zu verwenden ist (probiert es selbst vor einiger Zeit) und die Züge effizient. Nach Ausbildung und Prüfung, die GEWICHTE werden in eine Datei geschrieben. Dann haben Sie eine einfache pre-geschult Modell, von dem Sie starten können, Lesen Sie bitte das mitgelieferte examples/mnist/test.cpp und examples/mnist/train.cpp. Es kann leicht geladen werden, für die Prüfung (oder erkennen von Ziffern), so dass Sie die debug-code während der Ausführung eines gelernten Modells.
Wenn Sie wollen, um zu überprüfen ein kompliziertes Netzwerk, haben Sie einen Blick auf die Cifar-10 Beispiel.
Dies ist die einfachste Implementierung, die ich gesehen habe: DNN McCaffrey
Auch der source-code für diese von Karpathy sieht ziemlich unkompliziert.