Ich habe mich einmal daran gesetzt, neuronale Netzwerke auf dem CH32V003 zu implementieren. Besondere Einschränkung: Die MCU nutzt den RV32EC Befehlssatz ohne Multiplikation, sowie hat nur 2kb ram und 16kb flash.
Die Netzwerke müssen demnach mit nur 1-4 Bit (0-3 bit + Vorzeichen) für die Parameter auskommen. Die Inferenzengine ist relativ einfach. Die Herausforderung lag hier darin, das Netz so zu trainieren, dass es die Gewichte mit nur wenigen bits optimal ausnutzt.
Erstaunlicherweise kann man auch auf dieser Plattform >99% MNIST Testgenauigkeit erreichen. Es gibt zwar auch viele Beispiele auf Arduino u.Ä., aber die legen eher bei <95%
https://github.com/cpldcpu/BitNetMCU
Innerloop für 2 Bit weights.
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|