Maschinelles Lernen auf einem µC

Gast #4653187
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
Gast #4653194
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?
Gast #4653199
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.
Gast #4653205
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
Gast #4653959
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren