Ich habe einen Generator für neuronale Netze erstellt, der auf FPGA läuft.
--FeedForward neuronales Netzwerk kann hergestellt werden
Das Repository ist hier https://github.com/kotauchisunsun/NN_FPGA
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.
Affero GPL v3
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.
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,
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.
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