[PYTHON] Ich habe einen neuronalen Netzwerkgenerator erstellt, der auf FPGA läuft

Überblick

Ich habe einen Generator für neuronale Netze erstellt, der auf FPGA läuft.

Funktion

--FeedForward neuronales Netzwerk kann hergestellt werden

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

Betriebsumgebung

Python2.7 wird für Generatoren benötigt, Icurus Verilog wird jedoch ohne Simulation nicht benötigt. Es ist keine spezielle Bibliothek erforderlich, nur die Python-Standardbibliothek funktioniert.

Lizenz

Affero GPL v3

Wie benutzt man

Struktureller Teil des Neuronalen Netzes Die grundlegende Grammatik ist

$ python script/main.py width input_num structure output_num

width: Bruchbitbreite input_num: Anzahl der Eingangssignale Struktur: Zeigt die Netzwerkstruktur an. Die mehrstufige Struktur kann durch Trennen durch Kommas ausgedrückt werden (später beschrieben). output_num: Anzahl der Ausgangssignale

Beispiel)

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

Infolgedessen wird in generate.v ein neuronales Netz mit dem Namen NN_NL_016_0002_0002_NL_016_0002_0002 erstellt, das mit einem 16-Bit-Bruch arbeitet. Dies stellt ein neuronales Netz dar, wie in der folgenden Abbildung gezeigt. image

Die Bedeutung von jedem Eingabe *: Eingabe Ausgabe *: Ausgabe w *: Gewichtsfaktor für die Eingabe b *: Neuronale Netzvorspannung

Zum Beispiel ist die Bedingung, dass das obere linke neuronale Netzwerk ausgelöst wird

if input1 * w1 + input2 * w3 + b1 > 0:
    return 1
else:
    return 0

Es ist.

Auch die Reihenfolge der an NN_NL_016_0002_0002_NL_016_0002_0002 übergebenen Argumente,

  1. input*
  2. w*
  3. b*
  4. output* Es ist die Reihenfolge von. Wenn Sie also den ganzen Fall aufschreiben
input1,input2,w1,w2,w3,w4,w5,w6,w7,w8,b1,b2,b3,b4,ouput1,output2

Es ist. Das Ergebnis der Schlussfolgerung des neuronalen Netzwerks ist in Ausgabe1 und Ausgabe2.

Darüber hinaus kann diese main.py auch ein mehrstufiges neuronales Netzwerk aufbauen.

$ python main.py 16 32 64,32,48 16

Dann kann es 16 Bit breite Brüche verarbeiten.

Schicht Anzahl der Einheiten im neuronalen Netz
Eingabeebene 32
Versteckte Ebene 1 64
Versteckte Ebene 2 32
Versteckte Schicht 3 48
Ausgabeschicht 16

Sie können ein neuronales Netzwerk namens aufrufen.

Bruchausdruck

Das neuronale Netzwerk unterstützt diesmal nicht den üblicherweise verwendeten Gleitkomma. Daher dauert es einige Zeit, den Gewichtskoeffizienten und die Eingabe zu ersetzen.

Die Spezifikationen der Fraktion sind wie folgt. Wenn Breite = 16 1 bis 8 Bits: Jedes Bit im Bruchteil repräsentiert 2 ^ (-8 + i-1). (C) 9 bis 15 Bits: Integer-Teil Jedes Bit repräsentiert 2 ^ (i-8-1). (N) 16 Bit: Negatives Zahlenflag. (F)

bit 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Bedeutung F N N N N N N N C C C C C C C C

Es ist. Bits bis zur Breite / 2 sind der Bruchteil, das obere Bit ist das Flag für negative Zahlen und die anderen sind der ganzzahlige Teil.

Es ist kompliziert, so viel zu hören, deshalb habe ich ein Drehbuch vorbereitet.

$ python script/convert_number.py width number
``
width:Bruchteil der Bitbreite
number:Wert, den Sie konvertieren möchten

Beispiel:

$ python script/convert_number.py 16 5.5

16b'0000010110000000 ABS ERROR = 0.000000e+00


Als Ergebnis 5 mit einem 16-Bit-Bruch.Wenn 5 ausgedrückt wird, 16b'Sie können sehen, dass es 0000010110000000 wird.
Sie können sehen, dass es in Ordnung ist, diesen Wert beim Erstellen mit Verilog einzugeben.
Hier ist ABS ERROR ein Fehler, wenn er als Bruch ausgedrückt wird. Wenn eine Dezimalzahl als 16-Bit-Binärzahl ausgedrückt wird, wird der erzeugte absolute Fehler in Dezimalschreibweise ausgedrückt.

Beispiel:

$ python script/convert_number.py 16 -1.1

16b'1111111011100111 ABS ERROR = 2.343750e-03


-1.Wenn 1 durch einen festen Bruchteil von 16 Bit dargestellt wird, ABS ERROR= 2.343750e-Da es 03 ist, können Sie sehen, dass ein Fehler vorliegt. Wenn es daher als fester Bruchteil von 32 Bit ausgedrückt wird,

Beispiel:

$ python script/convert_number.py 32 -1.1

32b'11111111111111101110011001100111 ABS ERROR = 9.155273e-06


ABS ERROR = 9.155273e-Es wird 06, und es ist ersichtlich, dass der Fehler im Vergleich zu 16 Bit reduziert ist. Wenn Sie die Bitbreite erhöhen, erhöht sich die Genauigkeit, aber die Schaltungsskala erhöht sich und es funktioniert nicht auf dem FPGA. Stimmen Sie also während des Balancierens ab.

#Am Ende

Es ist 4 Monate her, seit ich Verilog HDL und FPGA gestartet habe. Wenn Sie Fehler, Fehler, Erweiterungsrichtlinien usw. haben, teilen Sie uns dies bitte mit.


Recommended Posts

Ich habe einen neuronalen Netzwerkgenerator erstellt, der auf FPGA läuft
Ich habe das neuronale Netzwerk auf dem eigentlichen FPGA betrieben
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe versucht, ein zweischichtiges neuronales Netzwerk zu implementieren
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
Erstellt ein Bildunterscheidungsmodell (cifar10) unter Verwendung eines Faltungs-Neuronalen Netzwerks
Ich habe einen LINE-Bot erstellt, der jeden Tag pünktlich empfohlene Bilder sendet
Ich habe einen Linebot erstellt, der mich über nahegelegene Evakuierungsstellen auf AWS informiert
Ich habe ein neuronales Netzwerk Π-Net ausprobiert, für das keine Aktivierungsfunktion erforderlich ist
〇✕ Ich habe ein Spiel gemacht
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
[Django] Drücken Sie einen Befehl, den Sie in dem Prozess ausgeführt haben, der auf manage.py ausgeführt wird.
Eine Geschichte, die stolperte, als ich mit Transformer einen Chat-Chat-Bot erstellte
Ich habe versucht, das grundlegende Modell des wiederkehrenden neuronalen Netzwerks zu implementieren
Implementieren Sie ein dreischichtiges neuronales Netzwerk
Ich möchte einen Mox-Generator
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
unixtime ← → Ich habe versucht, eine Klasse zu erstellen, die die Datums- / Uhrzeitkonvertierung problemlos durchführt
Ich habe eine verdammte App gemacht, mit der du nicht überspringen kannst
Ich möchte einen Mox-Generator (2)
Ich habe ein VGG16-Modell mit TensorFlow gemacht (unterwegs)
Ich habe ein Anomalieerkennungsmodell erstellt, das unter iOS funktioniert
Ich habe einen harten Pomodoro-Timer entwickelt, der mit CUI funktioniert
Ich habe einen Python-Text gemacht
Ich habe einen Zwietrachtbot gemacht
Ich habe versucht, Musik im Neural Network in Dur / Moll zu klassifizieren
Aufbau eines neuronalen Netzwerks, das XOR durch Z3 reproduziert
Ich habe ein Convolutional Neural Network (CNN) mit einem TensorFlow-Tutorial zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe eine einfache Netzwerkkamera hergestellt, indem ich ESP32-CAM und RTSP kombiniert habe.
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Ich habe Taiga.IO auf CentOS7 installiert (ich habe ein Skript erstellt, als ich dort war)
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
Ich habe einen Twitter-Bot erstellt, der das von #PokemonGO gefangene Pokemon murmelt
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Ich habe einen lo-Befehl erstellt, der nützlicher ist als ls
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe eine C ++ - Lernseite erstellt
Ich habe einen Line-Bot mit Python gemacht!
Ich habe ein CUI-basiertes Übersetzungsskript erstellt (2)
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Ich habe mit Python eine Lotterie gemacht.
Ich habe ein CUI-basiertes Übersetzungsskript erstellt
[Python] Ich habe einen Bot erstellt, der mir die aktuelle Temperatur anzeigt, wenn ich einen Ortsnamen in LINE eingebe
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe einen Passwortgenerator erstellt, um Kindern Python3 beizubringen (Bonus) * Vollständig neu erstellt
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe ein Plug-In "EZPrinter" erstellt, das Karten-PDF mit QGIS einfach ausgibt.
Verdächtige Angriffe, die auftraten, als ich einen Blog über EC2 startete
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann