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
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.
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.
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
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.
>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.
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.
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
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.
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..
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.
:-)
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.
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.
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.
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.
вег мит дем троль 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
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
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.
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?
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
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.