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
Am RaspberryPi musst du eigentlich direkt auf Linux programmieren. Da hast du schon dein Betriebssystem.
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..
Kennt jemand Beispiel Code für ein neuronales Netzt in C? Wie so etwas realisiert wird??
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
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.
Das Lernen sollte auf einem PC erfolgen. Denn In-situ kann nicht gelernt werden.
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.
Ah ja. Dann zeig mal. Ich hab schon drauf gearbeitet.
:
Bearbeitet durch User
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
вег мит дем троль 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 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
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
> 35.) Krieg ist gut für den Profit*
Steht im Wappen von Siggi-Pop.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.