Moin, ich moechte folgendes Problem mit kuenstlichen neuronalen Netzen bewaeltigen und braeuchte kurz mal eine Einschaetzung von jemandem, der sich damit auskennt, bevor ich es morgen im Kurs als Projekt vorschlage: Ich habe ein (spaeter verrauschtes) Bild in dem sich ein dunkler Punkt auf hellem Grund befindet. Nun moechte ich dessen Koordinaten finden und aus denen eine Winkelkonfiguration berechnen, die ein zwei Gelenk-Armmodell in der Ebene einnehmen muesste, um dort hin zu langen. Das Armmodell sollte am menschlichen Arm orientiert sein, man muss also eine Winkelbeschraenkung beachten, hat aber wohl oft eine eindeutige Loesung. Das ganze soll mit neuronalen Netzen bewaeltigt werden. Ist das realistisch? Und wo soll ich beginnen mich einzulesen? Das haette ich auch laengst getan, aber der Arbeitsdruck hier ist relativ gross, so dass mir bisher keine Zeit geblieben ist. Danke und Gruss, Joern
Joern, neuronale Netze nimmt man unter folgenden Umstaenden : -man hat sinnlos viel Rechenpower -es ist ein akademisches Projekt, man moechte was publizieren -man ist zu faul, oder weiss sonstwie nicht weiter -man hat genuegend Zeit Sorry. Ein dunkler Punk in einem Bild ist auch durch Korrelation zu finden.
Haste recht, ich habe schon mal mit einfachen Schwellenwerten und Schleifen dunkle Punkte in Bildern gefunden. Aber auch mit Punkt zwei haste Recht und darum geht es eben: Es ist fuer einen Kurs an der Uni, der obgleich er Advanced Topics in Control hiess, The Computational Neurobiology of Reaching and Pointing behandelt. Ich habe also nicht die Wahl, das mit einem Schwellwert und einfachen trigonometrischen Gleichungen zu loesen. Also zu meiner Frage: Ist das realistisch? Kann man es mit endlichem Zeitaufwand loesen, wenn Sinn und Rechenzeit (solange sich letzteres in Grenzen haelt, ersteres tut es bestimmt) keine Rolle spielen? Gruss, Joern
Neuronale Netze kommen inzwischen recht häufig zum Einsatz, zB. zur Texterkennung. Hat sich einfach erwiesen das man schneller ein gutes Resultat hat bzw. ein besseres Resultat findet, wenn man was schreibt was den Algorithmus ausknobelt, anstatt den selber auszuarbeiten. Vom Prinzip her lässt sich deine Aufgabenstellung mit neuronalen Netzen lösen, das Netz dürfte auch garnicht so kompliziert werden. Du musst aber acht geben, dass du dem Netz nicht zuviel Rechenarbeit zumutest. Zb. wär es unklug das Netz die Positionen der Gelenke direkt berechnen zu lassen, besser du lässt es die Winkel der Gelenke berechnen und errechnest im Program daraus die Position. Die Position vom Punkt sollte auch relativ zum Arm angegeben werden. Testen kannst du die Sache ja relativ einfach, wenn die Winkel für die einzelnen Gelenke in bestimmten Tolleranzen sind berechnest du die absolute Position vom Arm. Je näher die am Punkt ist, desto besser. Dann lässt du das für ein paarhundert Individuen und Generationen durchlaufen. Das Netz selber dürfte garnet so kompliziert werden (überflüssige Neuronen verlangsamen die Evolution), musst du mal ausprobieren. Aber ein einfaches Feedforward mit 3 Ebenen dürfte reichen, insg. vll 20 Neuronen.
Vielen Dank, die Antwort hat mich weitergebracht! Das Netz soll auch nur die Winkel berechnen, es geht um eine sehr simple Simulation einer Einschaetzung der Armstellung auf Grundlage eines visuell erfassten Ziels. Kann ich Dir noch ein paar weitere bloede Fragen zumuten?: Was genau meinst Du mit "relativ zum Arm"? Der soll ja eine gewisse Ausdehnung haben. Relativ zur Hand (Ende des Armes) oder ist auch eine Position relativ zum Schultergelenk machbar (wuerde ich vorziehen)? Das ganze wuerde ich gern in Java oder MATLAB realisieren. Gaebe es einen besonders guten Grund fuer MATLAB (ich wuerde Java vorziehen, aber mein Gruppenkollege eben MATLAB)? Und wo kann ich mich ueber das Trainieren von neuronalen Netzen belesen? Bisher ist mir das noch ein grosses Raetsel. Gruss, Joern
Relativ zum Arm meint, dass du dem Netz zB. nicht übergeben sollst "Schulter auf 103;123 Ziel auf 345;678" sondern entsprechend "greife zu 202;555" wobei die Schulter immer auf 0;0 festgenagelt wird. Ansonsten muss das Netz die Sache berechnen, und 2 einfache Subtraktionen können in einem NN schon kompliziert werden... das Netz soll ja genauso reagieren, wenn Schulter und Punkt irgendwo anders liegen, aber relativ zueinander gleich. Rotationen etc. vorher auch rausrechnen, also zB. so, dass 50;0 immer "Arm senkrecht zum Körper" (zB. beim Menschen) bedeutet. Wenn du dir den zugehörigen Menschen im Koordinatensystem vorstellst, würde der dann zB. immer parallel zur Y-Achse stehen, welche genau durch die Schulter geht. http://ai-junkie.com/ann/evolved/nnt1.html - hier hast du zB. ein schönes Tutorial zu Neuronalen Netzen, sehr an der Praxis orientert. Ach ja, mach die Sache in Java oder C/++. Auch bei kleinen NNs muss schon einiges gerechnet werden um die NNs zu verbessern. In deinem Fall kannst du zB. 100x100 Testfälle nehmen (Punkte gleichmäßig über alle vorkommenden Koordinaten verteilt), jedes Netz auf alle Testfälle loslassen, und die Fitnesswerte mitteln. Bei 100 Individuen und 1000 Generationen macht das 1Mrd Testrechnungen. Wenn der evolutionäre Teil gut ist, hast du mitunter auch nach 100 Generationen schon sehr gute Ergebnisse.
Man trainiert das NN mit der Backpropagation. Dh man nimmt den Fehler, soll-ist und rechnet den rueckwaerts. Anteilig zum Gewicht (in den linien) wird der Fehler zurueck gerechnet. Durch das einzelne Neuron hindurch. Die korrektur ist jeweilse nur 1%, oder so. Das macht man am besten global einstellbar.
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.