Forum: Mikrocontroller und Digitale Elektronik Maschinelles Lernen auf einem µC


von Reiner (Gast)


Lesenswert?

Hallo Forum,

ich beschäftige mich gerade mit maschinellem Lernen am Rande, da ich in 
einer festen batteriebetrieben Applikation eine passende 
Hardwareplattform dafür anbieten muss. Leider lassen die wenig gemachten 
Voruntersuchungen mir nicht viel Wahl und ich muss etwas tiefer rein.

Für den PC gibt es ja schon so einige Toolkits. Interessant sind 
natürlich die kostenfreien. Für Python gibt es Scikit-learn und neu: 
Tensorflow von google. API's die anbieten auf der Grafikkarte die 
Algorithmen zu lösen, sagen ja schon recht viel über den 
Ressourcenhunger aus...

Zur Aufgabenstellung:

Ich habe eine 4-Dimensionale (Eingangswerte) (evtl. auch höhere D.) 
Funktion zu der ich eine 3D-Lösungsfunktion (Ausgangswerte) besitze. 
Also einfach ausgedrückt: Ich habe drei Eingangswerte und brauche die 
zwei passenden Ausgangswerte. Lösung: maschinelles Lernen -> Regression 
?!

Nun waren die ersten Versuche nicht von mir und es stellte sich heraus, 
dass es mit 8 GB Arbeitsspeicher und nem Quad-Core CPU ganz gut 
funktioniert...

Zur Frage:

Ich habe mir einiges an Dokumentation zu scikit-lern durchgelesen, 
leider konnte ich bisher keine Parameter entdecken, mit dem ich den 
Ressourcenhunger beim Lernen begrenzen könnte.
Mein Wunschziel wäre es eine "Lernmatrix" in der Größe um maximal 1 MB 
(Flash) zu genieren und die anschließende Regression sollte maximal 300 
kB RAM benötigen. Die Rechenzeit würde ich der Einfachheit halber erst 
einmal ausklammern. Ich fürchte nur, dass sich die nötigen Ressourcen 
einfach aus den verwendeten Algorithmen (+ Datenpunkten) ableiten.
Mein Ansatz bei über 100k Samples wäre nach diesem Flowchart: 
http://scikit-learn.org/stable/tutorial/machine_learning_map/
wäre die SGDRefressor Klasse.

Bin ich auf dem Holzweg? Könnte mir jemand kurz umreißen wie ich dieses 
Problem angehe und der Lösung näher rücke?

Vielen Dank

Reiner

von Lupini (Gast)


Lesenswert?

> Ich habe eine 4-Dimensionale (Eingangswerte) (evtl. auch höhere D.)
> Funktion zu der ich eine 3D-Lösungsfunktion (Ausgangswerte) besitze.

Butter bei die Fische. Wie sehen die Funktionen aus?

> Also einfach ausgedrückt: Ich habe drei Eingangswerte und brauche die
> zwei passenden Ausgangswerte.

Nur drei Werte, die auf zwei abgebildet werden?

von Reiner (Gast)


Lesenswert?

Sorry, natürlich habe ich mehr Daten (> 100 kSamples), also drei 
Eingangsdatenreihen sollen auf zwei Ausgangsfunktionen abgebildet 
werden. Der Input kommen von Gassensoren. Der Ausgangs-/Referenzsignale 
wurden natürlich zuvor ermittelt.

von Georg (Gast)


Lesenswert?

Reiner schrieb:
> Ich habe drei Eingangswerte und brauche die
> zwei passenden Ausgangswerte.

Ein neuronales Netz lässt sich auch auf einem µController realisieren, 
es kommt halt darauf an wie komplex. Man kann aber auch das Lernen auf 
einem PC durchführen und nur die fertigen Parameter an den Controller 
übergeben.

Georg

von Reiner (Gast)


Lesenswert?

Das habe ich vor. Ich möchte nur gern die gelernten Daten schon beim 
anlernen auf ein realistische Größe begrenzen. Wie könnte ich das 
angehen z.B. mit scikit-learn?

von Jim M. (turboj)


Lesenswert?

Reiner schrieb:
> Der Input kommen von Gassensoren. Der Ausgangs-/Referenzsignale
> wurden natürlich zuvor ermittelt.

Und Du bist Dir sicher dass sich das nicht mit klassischer Statistik 
erschlagen lässt? Der Gradientenabstieg ist zwar universell aber 
ziemlich rechenaufwändig IIRC.

von lks (Gast)


Lesenswert?

Naja, einfach mit einem beliebigen Framework das Netzwerk anlernen. 
Hierbei darauf achten, dass du nicht zuviele Neuronen + Schichten 
einsetzt und idealerweise LReLU oder ReLU Aktivierungsfunktionen. Je 
nach komplexität kommst du vielleicht mit ein paar hundert floats aus. 
Die angelernten Gewichte exportieren und dann brauchst du auf dem uC nur 
noch ein wenig addieren + multiplizieren und die nichtlineare 
Aktivierungsfunktion anwenden. Hierfür ist manchmal eine Matrix Bib 
hilfreich.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wieso musses denn unbedingt auf einem µC laufen? Jeden Tag kommen doch 
ein paar neue Multicore-ARMs mit RAM und Gedoens und GHz auf kleinen 
Platinen fuer kleines Geld raus. Da drauf laeuft sicherlich das, was du 
an Software vom dem PC kennst...

Gruss
WK

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.