Forum: Mikrocontroller und Digitale Elektronik Neuronales Netz auf Mikrocontroller


von Peter (Gast)


Lesenswert?

Hallo,

ich habe vor ein Neuronales Netz auf einem Mikrocontroller zu 
implementieren. Die Programmiersprache steht fest und wird C sein.

Es werden viele Euler-Funktionen zu berehnen sein und meine Frage 
lautet, welcher Mikrocontroller hat die entsprechenden Module (ich 
glaube mich an 'Gleitkommaarithmetik' zu erinnern) und vor allem 
genügend Rechenpower.

Ein weiterer Punkt ist, dass ich wohl ohne dynamische Speicherverwaltung 
nicht auskommen werde. Im Bereich Mikrocontroller ist mir das allerdings 
bisher noch nicht untergekommen. Gibt es in diesem Zusammenhang 
zusätzlich etwas zu beachten (Notwendigkeit eines Betriebssystems 
evtl.)?

Ein STM32F4 (Discovery-Board) würde mir zusagen, oder evtl. auch ein 
Raspberry-Pi. Oder sind die viel zu langsam / klein?

Jeder Tipp ist willkommen.

Gruß Peter

: Verschoben durch Moderator
von Jonas G. (jstjst)


Lesenswert?

Am RaspberryPi musst du eigentlich direkt auf Linux programmieren. Da 
hast du schon dein Betriebssystem.

von Peter II (Gast)


Lesenswert?

Peter schrieb:
> Ein STM32F4 (Discovery-Board) würde mir zusagen, oder evtl. auch ein
> Raspberry-Pi. Oder sind die viel zu langsam / klein?

das kommt doch wohl auf die Größe von deinen Netzwerk an. Warum 
programmierst du es nicht erst auf einen PC? Dann sieht du wie viel Ram 
und CPU du brauchst und kannst dann entscheiden welchen µC es werden 
soll.

von Operator S. (smkr)


Lesenswert?

Peter II schrieb:
> Warum
> programmierst du es nicht erst auf einen PC?

Wenn du auf dem PC bereits ein Linux hast, kannst du alle Tests und das 
Debuggen bequem auf dem PC machen und am Schluss nurnoch 
Crosscompilieren für den RPi z.B.

von Peter (Gast)


Lesenswert?

Erstmal Danke für die Antworten.

Jonas G. schrieb:
> Am RaspberryPi musst du eigentlich direkt auf Linux programmieren. Da
> hast du schon dein Betriebssystem.

Der Ansatz sagt mir zu.

Peter II schrieb:
> Warum
> programmierst du es nicht erst auf einen PC?

Operator S. schrieb:
> Wenn du auf dem PC bereits ein Linux hast, kannst du alle Tests und das
> Debuggen bequem auf dem PC machen und am Schluss nurnoch
> Crosscompilieren für den RPi z.B.

Auch das macht Sinn.


Ich habe mich jetzt auch ein wenig in den RasPi eingelesen und denke, 
das ist die richtige Hardware.

Allerdings überlege ich, auch direkt auf der Kiste zu programmieren, und 
es überrascht mich etwas, dass diese Möglichkeit noch nicht erwähnt 
wurde. Ihr sprecht nur von Crosscompilieren.

Was spricht gegen das Arbeiten auf dem RasPi? Spart man damit nicht die, 
(vermutlich nervige) Datenübertragung vom PC auf die Zielplattform?

Danke, Peter

von Peter II (Gast)


Lesenswert?

Peter schrieb:
> Was spricht gegen das Arbeiten auf dem RasPi?
nichts, wenn man ohne große IDE arbeitet - Eclipse und Co machen dort 
nicht wirklich Spaß. VIM und EMACS ist ok.

>  Spart man damit nicht die,
> (vermutlich nervige) Datenübertragung vom PC auf die Zielplattform?
in Zeiten von Netzwerklaufwerken (SAMBA, NFS ) spielt das kaum eine 
rolle.

von вег мит дем троль (Gast)


Lesenswert?

>Ein weiterer Punkt ist, dass ich wohl ohne dynamische Speicherverwaltung
nicht auskommen werde.

Tatsaechlich ? Wozu denn ? Ein NN ist nun ja wirklich etwas Statisches. 
Eine feste Anzahl Knoten, nur die Gewichte aendern.

von Jasch (Gast)


Lesenswert?

Peter schrieb:
>
> Was spricht gegen das Arbeiten auf dem RasPi? Spart man damit nicht die,
> (vermutlich nervige) Datenübertragung vom PC auf die Zielplattform?

Naja, Du tauschst damit die (seltene, nicht so langsame) 
Datenübertragung vom schnellen (im Vergleich Hochleistungs-)PC auf den 
RasPi gegen die permanent, je nach GUI deutlich, lahme Arbeit auf 
einem (im Vergleich zu einem PC immer abstinkenden) ARM-Dingens.

Das muss man mögen, empfehlen wird das wohl eher niemand. Auf absehbare 
Zeit wird eine ARM-CPU nicht mit einer x86/x64 CPU konkurrieren können 
wenn es um ernsthafte Arbeit geht, auch wenn einige bekloppte 
Journalisten sowas verkünden. Mein Lieblingsartikel dazu war ein 
Schriebs, der die 64-Bit-ARMs im iPhone als "Workstation-Class CPUs" 
titulierte. Heilige Sch****, kann Er nicht mal Hirn vom Himmel werfen 
damit das Elend aufhört?

Bevor jemand rummotzt, ich mache hier ARM nicht nieder, ich beschreibe 
die verschiedenen Design-Ziele von ARM und xXX.

von Tommy.S (Gast)


Lesenswert?

Hi Peter,

gegen neuronale Netze auf einem Mikrocontroller spricht ja prinzipiell 
mal nichts... Habe ich selbst mehrfach eingesetzt und läuft auch 
problemlos...

> Es werden viele Euler-Funktionen zu berehnen sein und meine Frage
> lautet, welcher Mikrocontroller hat die entsprechenden Module (ich
> glaube mich an 'Gleitkommaarithmetik' zu erinnern) und vor allem
> genügend Rechenpower.

Lookup-Tabelle und Interpolationsfunktion. Geht problemlos in Integer 
mit Skalierung oder gleich mit Fix-Point Bibliothek.

Zur Rechenpower: Die ist recht überschaubar, insbesondere, wenn Du das 
initiale Training auf Deinem Entwicklungs-PC machst. Da werden ein paar 
Durchläufe nötig sein, um das Netz, bzw. die Gewichte zu trainieren. 
Sobald dann nur noch Werte durch das Netz durchpurzeln müssen um die 
Klassifikation zu machen, ist Rechenleistung - außer bei extrem großen 
Netzen - eher das kleinere Problem. Deine Gewichtungsmatrix wird 
voraussichtlich eher Deinen Speicher sprengen als dass Dir die 
Rechenleistung ausgeht.

> Ein weiterer Punkt ist, dass ich wohl ohne dynamische Speicherverwaltung
> nicht auskommen werde. Im Bereich Mikrocontroller ist mir das allerdings
> bisher noch nicht untergekommen. Gibt es in diesem Zusammenhang
> zusätzlich etwas zu beachten (Notwendigkeit eines Betriebssystems
> evtl.)?

Warum dynamische Speicherverwaltung? Ein neuronales Netz ist doch nichts 
anderes als eine Matrix mit den Knotengewichten drin. Ich habe in keiner 
meiner Anwendungen bisher je dynamische Speicherverwaltung benötigt...

Gruß,
Tommy.S

von Thomas W. (Gast)


Lesenswert?

Peter schrieb:
> Ein weiterer Punkt ist, dass ich wohl ohne dynamische Speicherverwaltung
> nicht auskommen werde. Im Bereich Mikrocontroller ist mir das allerdings
> bisher noch nicht untergekommen.

"Mikrocontroller" ist ein weiter Begriff. Bei ein paar Kilobyte RAM und 
gar noch ohne OS gibt es nicht viel dynamisch zu Verwalten. Da ist die 
Aufteilung des Speichers eher eine Frage des Geschickes, wenn es anfängt 
eng zu werden.

von dunno.. (Gast)


Lesenswert?

Wenn wir schon darüber reden, dass es mehr sinn macht auf der 
Workstation zu arbeiten, und nur noch für den PI zu Compilieren, sollte 
wohl auch mal jemand auf die Möglichkeit hinweisen, auf dem PC zu 
arbeiten und (automatisiert) auf dem PI zu debuggen.
-> Remote Debugging mit Eclipse

http://hertaville.com/2013/01/11/remote-debugging/

Nur so als Tipp, für die dies noch nicht kennen..

von Stephan_der_II (Gast)


Lesenswert?

Kennt jemand Beispiel Code für ein neuronales Netzt in C?

Wie so etwas realisiert wird??

von Pandur S. (jetztnicht)


Lesenswert?

Ein NN berechnet fuer ein Eingangsmuster ein Ausgangsmuster aufgrund 
gelernten aehnlichen Mustern.

Wenn man Zeitablaeufe haben will, muss man am Eingang ein 
Schieberegister vorschalten. Und erhaelt dann vielleicht nur einen 
einzelnen Ausgang.

Ein NN ist eine Lage von Eingangsknoten, das wird ei Muster angelegt. 
Soviele Groessen ich eingelesen haben will, soviele Knoten habe ich da. 
Dann kommt eine Lage mittlerer Knoten, da ist jeder Knoten mit allen 
Eingangsknoten verwunden, wobei jede Verbindung gewichtet ist. Jeder 
mittlere Knoten nimmt jeden Eingang multipliziert mit dessen Gewicht, 
summiert auf und laesst das Resultat nun auf eine begrenzende Funktion, 
bei der alles von plus-minus Unendlich auf plus-mius Eins angebildet 
wird. zB einen Arctan. Das waer dann der Ausgnag dieses Knotens. Von 
diesen mittleren Knoten habe ich soviel ich will. Ein Geruecht besagt, 
mit dieser Anzahl Knoten gegen unendlich kriegt man jedes Problem 
geloest. Dann kommt eine Lage Ausgnagsknoten, deren Ausgang bildet dann 
das Ausgnagsmuster. Soviel Ausgangsvariablen ich haben will. Jeder 
Ausgangsknoten hat nun von jedem mittleren Knoten eine Verbindung mit 
einem Gewicht. Die selbe Aufsummiererei, dieselbe Nichtlineare 
Abbildung. Zuletzt ein Multiplikator, dass man auch Werte ausserhab von 
plusminus Eins erreicht. Bisher Trivial. Das Wissen ist in den 
Gewichten. Und das muss gelernt werden. Indem man 
Eingangsmuster-Ausgangsmuster Paare in beliebiger Folge anlegt und die 
Gewichtungen so verstellt dass die Loesungen konvergieren. Man ist 
schnell mal bei 10^4 .. 10^6 Durchgaengen mit allen Paaren. 
Inkrementales Lernen geht nicht. Wenn einen neues 
Eingangsmuster-Ausgangsmuster Paar hinzukommt, muss alles neu gelernt 
werden.

Man kann auch mehr als eine Lage mittlerer Knoten haben.

Das Ganze ist nicht wirklich brauchbar ausser fuer akademische 
Interessen. Effiziente Loesungen erhaelt man nicht. Die Aussage fuer 
eine NN Loesung zu einem Problems ist : Das Problem interessiert mich 
nicht, die Loesung interessiert mich nicht, aber ich habe beliebig viele 
Resourcen. In dem Sinne : Ein C Code dazu verschwindet unter beliebig 
viele Resourcen.

Heisst. Man kann mit NN etwas erreichen, ist aber mit einer durchdachten 
Loesung schneller und effizienter.

:-)

: Bearbeitet durch User
von Kenner (Gast)


Lesenswert?


von P. M. (o-o)


Lesenswert?

Peter schrieb:
> Jeder Tipp ist willkommen.

Ich gehe mal davon aus, dass du eher ein Neuling bist in dem Gebiet...? 
Deshalb rate ich dir, dass du das Netz zuerst in einer Skriptsprache mit 
exzellenten numerischen Analysemöglichkeiten implementierst, z.B. 
Matlab, Scilab oder Octave. Die Algorithmen klingen oft einfach, aber 
bei der Implementierung passieren immer Dinge, die eine sehr präzise 
Analyse und Fehlersuche erfordern. Auch bei den vermeintlich einfachsten 
Aufgaben. Immer. Ohne dass man jegliche Aspekte visualisieren kann, hat 
man oft keine Chance, den Fehler zu finden.

Deshalb: Zuerst Algorithmenentwicklung mit Matlab/Scilab/Octave, dann 
Implementierung in C und Tests auf dem PC, dann Portierung auf den 
Mikrocontroller.

von asdf (Gast)


Lesenswert?

Welchen Typ Neuronales Netz willst Du denn implementieren? Das gibt es 
sehr viele unterschiedliche. Da das noch nicht klar zu sein scheint, ist 
es wahrscheinlich besser, Dein Problem (welches?) erst mal mit einem kNN 
auf einem PC zu loesen und dann, wenn Du eine passende Netztopologie 
gefunden hast, auf den uC zu gehen.

@jetztnicht: Da hast Du aber anscheinend die letzten 30 Jahre nicht 
aufgepasst. Z.B: Die selbstfahrenden Autos von Daimler haben den 
Lenkwinkeleinschlag schon Anfang der 90er mit einem kNN berechnet und 
sind unfallfrei quer durch Deutschland gefahren.

von Pandur S. (jetztnicht)


Lesenswert?

Das Lernen sollte auf einem PC erfolgen. Denn In-situ kann nicht gelernt 
werden.

von P. M. (o-o)


Lesenswert?

Jetzt N. schrieb:
> Das Lernen sollte auf einem PC erfolgen. Denn In-situ kann nicht gelernt
> werden.

Jetzt N. schrieb:
> Das Ganze ist nicht wirklich brauchbar ausser fuer akademische
> Interessen.

Bei allem Respekt, aber das kann man schlicht als Unsinn taxieren. Es 
wäre nett, wenn du die Diskussion nicht weiterhin mit deinem 
fehlerhaften Wissen stören würdest.

von Pandur S. (jetztnicht)


Lesenswert?

Ah ja. Dann zeig mal. Ich hab schon drauf gearbeitet.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Ich hatte mal Kollegen, die haben mit einem NN Boersenkurse 
vorhergesagt. Dh vergangene Boersenkurse, Dh den Zeitablauf davon an den 
Eingang und den nachfolgenen Kurs gelernt. Mit viele Kursen. aug 
gleichzeitigen Kursen. Und nach dem Lernen der Vergangenheit auf die 
Zukunft losgelassen...

Aeh ja. Das Echo in der Finanzwelt war gross...

Es gibt wirtschaftliche Zusammenhaenge, die haengen an einem Detail, an 
einem politischen Statement einer Person. Das will man vorhersagen 
koennen. Schoen.

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

вег мит дем троль schrieb:
> Tatsaechlich ? Wozu denn ? Ein NN ist nun ja wirklich etwas Statisches.
> Eine feste Anzahl Knoten, nur die Gewichte aendern.

Tommy.S schrieb:
> Warum dynamische Speicherverwaltung? Ein neuronales Netz ist doch nichts
> anderes als eine Matrix mit den Knotengewichten drin. Ich habe in keiner
> meiner Anwendungen bisher je dynamische Speicherverwaltung benötigt...

Man kann das Ganze auch adaptiv gestalten. Man sucht sich ein paar 
Parameter als Eingangswerte und stellt dann fest, dass diese zu der 
Übertragungsfunktion auf die Ausgänge wenig beitragen. Dann kann man die 
wegoptimieren.

Jetzt N. schrieb:
> Inkrementales Lernen geht nicht.

Auch das ist möglich. Man lernt das Netz offline an und lässt es sich 
bei jedem neuen Eingangs- / Ausgangstupel weiterentwickeln.

P. M. schrieb:
> Ich gehe mal davon aus, dass du eher ein Neuling bist in dem Gebiet...?

Ich habe da schon einiges gemacht. Aber bisher nur auf dem PC (Matlab / 
C).

Peter II schrieb:
> Peter schrieb:
>> Was spricht gegen das Arbeiten auf dem RasPi?
> nichts, wenn man ohne große IDE arbeitet - Eclipse und Co machen dort
> nicht wirklich Spaß. VIM und EMACS ist ok.

Jasch schrieb:
> Naja, Du tauschst damit die (seltene, nicht so langsame)
> Datenübertragung vom schnellen (im Vergleich Hochleistungs-)PC auf den
> RasPi gegen die permanent, je nach GUI deutlich, lahme Arbeit auf
> einem (im Vergleich zu einem PC immer abstinkenden) ARM-Dingens.

Dann erfolgt die Programmierarbeit also auf dem PC.

Allerdings würde ich mir gerne die Option offen halten, alles auf dem Pi 
auszuführen. Deshalb brauche ich da auch eine GUI und bin auf der Suche 
auf die folgende Seite gestoßen:
https://wiki.qt.io/Category:QtonPi

Es wäre super, falls jemand Erfahrungen zu QtonPi hat, und mir auch dazu 
etwas sagen kann.

Vielen Dank für die Antworten!

Gruß Peter

von Falk B. (falk)


Lesenswert?

@Jetzt Nicht (jetztnicht)

>Aeh ja. Das Echo in der Finanzwelt war gross...

>Es gibt wirtschaftliche Zusammenhaenge, die haengen an einem Detail, an
>einem politischen Statement einer Person. Das will man vorhersagen
>koennen. Schoen.

Kann man doch.

34.)  Frieden ist gut für den Profit*
35.)  Krieg ist gut für den Profit*

http://www.cologneweb.com/StarTrek/ferengi.htm

Live long and prosper!

http://www.spiegel.de/kultur/kino/leonard-nimoy-mr-spock-ist-tot-a-1021026.html

von Georg (Gast)


Lesenswert?

Jetzt N. schrieb:
> Ich hatte mal Kollegen, die haben mit einem NN Boersenkurse
> vorhergesagt. ...
>
> Aeh ja. Das Echo in der Finanzwelt war gross...

Das spricht gegen die Intelligenz der Kollegen, nicht gegen neuronale 
Netze. Man kann mit NNs auch nicht die Lottozahlen von nächster Woche 
bestimmen.

Waren wohl BWLer.

Georg

von Jochen (Gast)


Lesenswert?

> 35.)  Krieg ist gut für den Profit*

Steht im Wappen von Siggi-Pop.

von P. M. (o-o)


Lesenswert?

Peter schrieb:
> P. M. schrieb:
>> Ich gehe mal davon aus, dass du eher ein Neuling bist in dem Gebiet...?
>
> Ich habe da schon einiges gemacht. Aber bisher nur auf dem PC (Matlab /
> C).

Ok, das sind schonmal sehr gute Voraussetzungen :-)

Für die Wahl des Controllers stellt sich letztlich die Frage, wie gross 
dein Netz wird und was für Algorithmen du verwendest. Bei NN geht das ja 
von "simpel" bis "Supercomputer-Niveau", z.B. die träumenden 
Bilderkennungs-NN von Google. Also von AVR über Raspberry bis zu einem 
dicken DSP ist alles denkbar.

von Tobias P. (hubertus)


Lesenswert?

Hallo zusammen
mich interessiert das Thema neuronale Netze auch sehr. Leider besitze 
ich darüber nur wenig brauchbares Halbwissen. Könnt ihr mir Websites, 
Vorlesungsskripte oder sonstige Literatur nennen, wo man eine einfache 
Einführung in das Thema bekommt und wo vielleicht an ein paar Beispielen 
das ganze erläutert wird?

von Arc N. (arc)


Lesenswert?

Tobias P. schrieb:
> Hallo zusammen
> mich interessiert das Thema neuronale Netze auch sehr. Leider besitze
> ich darüber nur wenig brauchbares Halbwissen. Könnt ihr mir Websites,
> Vorlesungsskripte oder sonstige Literatur nennen, wo man eine einfache
> Einführung in das Thema bekommt und wo vielleicht an ein paar Beispielen
> das ganze erläutert wird?

Dürfte mittlerweile ein "Klassiker" sein:
Stanfords/Courseras Machine Learning-Kurs von Andrew Ng
Mittlerweile wohl nur noch in der Self Paced-Variante:
https://www.coursera.org/learn/machine-learning/home/info
oder Practical Machine Learning:
https://www.coursera.org/course/predmachlearn

von Purzel H. (hacky)


Lesenswert?

Ich bin mir nicht sicher ob Bilderkennung per NN gemacht wird. Nur weil 
Machbarkeit gezeigt wurde, bedeutet das nicht eine effiziente 
Implementaion.
Wobei der Uebergang zwischen einer aufgepeppten Kreuzkorrelation und 
einem NN fliessend sein wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.