[PYTHON] Ich habe das neuronale Netzwerk auf dem eigentlichen FPGA betrieben

Überblick

Zuvor war der Quellcode, der vom Generator für neuronale Netze ausgegeben wurde, der in "Ich habe einen Generator für neuronale Netze erstellt, der auf FPGA läuft" veröffentlicht wurde, der eigentliche FPGA-Atlas-SoC. Ich habe versucht, es mit (DE0-Nano-SoC) auszuführen.

Das Repository ist hier https://github.com/kotauchisunsun/DE0_NN

Lizenz

Affero GPL v3

Funktion

image

Der DE0-Nano-Soc-Schalter wird eingegeben und die LED wird ausgegeben, um sich wie ein neuronales Netzwerk zu verhalten. Wenn der Schalter eingeschaltet ist, wird 1 zugewiesen, und wenn er ausgeschaltet ist, wird 0 zugewiesen.

Geben Sie SW [0] 1 ein Geben Sie SW [1] 2 ein SW [2] zum Ausgang des oberen linken neuronalen Netzwerks und zum Gewichtungskoeffizienten des oberen rechten neuronalen Netzwerks SW [3] zum Ausgang des neuronalen Netzwerks unten links und zum Gewichtungskoeffizienten des neuronalen Netzwerks oben rechts

Es ist zugeordnet. Ebenfalls,

Wenn sich das neuronale Netzwerk oben rechts entzündet, leuchtet die LED [0] auf. LED [1] leuchtet auf, wenn sich das untere rechte neuronale Netzwerk entzündet

Es ist eine solche Funktion.

Vorbereitung

Quellcode-Generierung

Diese Arbeit muss nicht aus dem obigen Repository kopiert werden.

Verwenden Sie den in "Ich habe einen Generator für neuronale Netze erstellt, der auf FPGA ausgeführt wird" verwendeten neuronalen Netzwerkgenerator.

https://github.com/kotauchisunsun/NN_FPGA

Wird geklont.

$ cd NN_FPGA
$ python script/main.py 16 2 2 2
> NN_NL_016_0002_0002_NL_016_0002_0002
> saved to generate.v
> None

Dies erzeugte eine Datei mit dem Namen generate.v und ein Modul mit dem Namen NN_NL_016_0002_0002_NL_016_0002_0002, das das Hauptmodul für neuronale Netze ist.

Briefpapier herunterladen

Atlas-SoC und DE0-Nano-SoC sind hinsichtlich der Hardware gleich, nur die Firmware unterscheidet sich. Daher können Sie DE0-Nano-SoC und Atlas-Soc ändern, indem Sie die Firmware mit der SD-Karte neu schreiben. Dieses Mal werden wir die unten verlinkten Daten mit der Bezeichnung SystemCD von DE0-Nano-SoC verwenden.

http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=941&PartNo=4#soc

Kopie des Demo-Projekts

Entpacken Sie die zuvor heruntergeladene Datei und

DE0-Nano_SoC_v.1.0.9_SystemCD\Demonstrations\SoC_FPGA\my_first_hps-fpga_base

Kopieren Sie my_first_hps-fpga_base und verwenden Sie sie.

Quellcode bearbeiten

Fügen Sie das vorherige Repository https://github.com/kotauchisunsun/DE0_NN oder die generierte generate.v zum Projekt hinzu.

Ich werde nicht im Detail erklären, wie man es hinzufügt, aber Sie können es über [Projekt] -> [Aktuelle Datei zum Projekt hinzufügen] in der Menüleiste hinzufügen.

Bearbeiten Sie danach ghrd.v im Projekt. Dies ist etwas Besonderes. Kopieren Sie den Inhalt von diff_ghrd.v in das Repository vor der Zeile ** 271 von ghrd.v und dem Endmodul **.

(Der Grund, warum es auf Umwegen geschrieben ist, ist, dass die Lizenz von ghrd.v selbst nicht gut verstanden wird. Wenn Sie sie also in das Repository stellen, können Probleme auftreten.)

Tatsächlicher Maschinenbetrieb

Kompilieren Sie es anschließend und brennen Sie es mit Programmer auf DE0-Nano-SoC.

IMAG0815.jpg Tatsächlich mit DE0-Nano-SoC

Testfall

Ich habe einen Testfall vorbereitet, weil ich nicht glaube, dass ich ihn verstehen kann, bis ich ihn tatsächlich verschiebe. Wenn Sie diese ausprobieren, können Sie sehen, wie das neuronale Netz tatsächlich läuft.

SW[0] SW[1] SW[2] SW[3] LED[0] LED[1]
off off off off off off
on off off off off on
off on off off off on
on on off off off on
on off off on on on
off off off on off off
off off on on off off

(Anmerkungen) Wenn SW [2] = Ein SW [3] = Ein, können Sie sehen, dass LED [0] und LED [1] ODER-Ausgänge von SW [0] und SW [1] sind.

Zusammenfassung

DE0 unter Verwendung des neuronalen Netzwerkgenerators (oder des daraus generierten Codes), der in "Ich habe einen neuronalen Netzwerkgenerator erstellt, der auf FPGA ausgeführt wird" erstellt wurde. - Wir haben ein neuronales Netzwerk erstellt, das mit Nano-SoC (Atlas-SoC) funktioniert, und bestätigt, dass es tatsächlich funktioniert.

Recommended Posts

Ich habe das neuronale Netzwerk auf dem eigentlichen FPGA betrieben
Ich habe einen neuronalen Netzwerkgenerator erstellt, der auf FPGA läuft
Ich habe Python unter Windows ausgeführt
Ich habe das TensorFlow-Tutorial mit Kommentaren ausgeführt (erstes neuronales Netzwerk: Beginn des Klassifizierungsproblems)
Ich habe versucht, Musik im Neural Network in Dur / Moll zu klassifizieren
Ich habe versucht, das Musikgenre anhand des Songtitels im Recurrent Neural Network vorherzusagen
Ich habe versucht, ein zweischichtiges neuronales Netzwerk zu implementieren
Ich bin auf die Hatena Keyword API gestoßen
Ich habe versucht, die Genauigkeit meines eigenen neuronalen Netzwerks zu verbessern
Behalten Sie das mit PyBrain aufgebaute neuronale Netzwerk bei
Ich werde das neuronale Netz "Differentiable Neural Computing (DNC)" mit externem Speicher erläutern.
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Starten und verwenden Sie das IPython-Notebook im Netzwerk
Ich habe versucht, mit tkinter mit dem Taschenrechner zu spielen
Ich habe ein wenig über die Klasse recherchiert
Parametrisches neuronales Netzwerk
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Ich habe versucht, die App auf der IoT-Plattform "Rimotte" auszuführen.
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Ich habe versucht, vier Optimierungsmethoden für neuronale Netze zusammenzufassen
Ich habe versucht, Pytest in die eigentliche Schlacht zu bringen
Ich habe versucht, den Linux-Kernel auf virtualbox + vagrant zu installieren
So zeichnen Sie einfach die Struktur eines neuronalen Netzwerks in Google Colaboratory mit "convnet-drawer"
Ich habe ein Convolutional Neural Network (CNN) mit einem TensorFlow-Tutorial zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.