und genau damit wäre es HaWe gelungen ein Thema zu beenden. Wollen wir das wirklich?
Ja, das war auch im Sinne der "Gucki"-Intelligenz gedacht, nämlich auf die Reduktion auf das absolut Essentielle, von dem man weiter aufbauten kann.das hat aber weder etwas mit einem Perzeptron noch mit einem Netz noch mit lernfähig zu tun..
Aber hier geht die Diskussion in die gleiche Richtung wie bei der Gucki Intelligenz: Der eine versteht die Grundlagen nicht, der andere meint, er weiß schon alles.
Ich halte es jetzt mal wie Wolfgang: Ich lasse die Diskussion hier bleiben, das führt zu nichts.
Spiking Neurons, the next step: https://www.roboternetz.de/community...en-Intelligenz
und genau damit wäre es HaWe gelungen ein Thema zu beenden. Wollen wir das wirklich?
gruß inka
Ich denke nicht, dass diesmal HaWe ...
Wenn er wirklich davon viel versteht, hat er Kommentare abgegeben, was nach seiner Erfahrung richtig ist.
Allerdings hätte Stochri auch früher sagen können, dass er mit diesem Thema hier nicht in die Richtung gehen möchte, wie sie in der von MXT verlinkten Seite aufgezeigt wird. Sondern, dass er einen neuen Ansatz sucht. Allerdings wissen wir nicht welchen. Und wenn der Ansatz in Richtung KNN geht, dann gibt es Ansätze, die grundlegend wichtig sind, damit so etwas funktioniert. Man kann das Thema auch ganz neu interpretieren, aus einem ganz andern Blickwinkel betrachten und ganz andere Techniken anwenden, aber welche und wie? Das muss Stochri dann vorgeben.
"Der eine versteht die Grundlagen nicht, der andere meint, er weiß schon alles."
Und dem nächstes sind Grundlagen zu langweilig.
Das ist ein generelles Problem. Spiegelt wohl aber die Bandbreite wider, die wir hier im Forum haben.
Verschiedene Meinungen sollten kein Problem sein, und so hat auch jeder seinen Standpunkt, wann er sich beteiligt oder wann er helfende Kommentare abgibt.
Ich für meinen Teil halte es für wenig hilfreich, wenn erst abgewartet wird, was andere beginnen, um dann z.B. mit einem "ist mir zu langweilig" dazwischen zu gehen.
Das ist auch ein Standpunkt und von der Sache her vertretbar. Aber man sollte schon daran denken, dass andere sich Arbeit machen, um im Thema voran zu kommen. Und das geht schnell mal in die Stunden, wenn man auch was Sinnvolles zu einem Thema beitragen möchte, dass man selbst noch nie erarbeitet hat.
Mich persönlich interessiert das Thema nicht wirklich, weil ich weiß, wohin es führt und welche Früchte mit so etwas, wie einem KNN, zu ernten sind. Dreißig Jahre Programmiererfarung helfen mir. Ich bin eher Verfechter anderer Methoden.
Dennoch habe ich im Moment Zeit, mich damit irgendwie zu beschäftigen, weil ich auf Teile warte, die erst zu Weihnachten hier sein werden.
Um aus dem schlau zu werden, wer hier was will und was unnötig ist, zu presentieren, habe ich, für alle User im Forum, eine Umfrage gestartet, die aber nur bei Beteiligung einen Sinn ergibt. Deswegen wäre es gut, wenn sich jeder daran beteiligt, egal welcher Meinung er ist. Ich habe versucht die wesentlichen drei Meinungen abzubilden, von denen jeder eine für sich priorisieren können sollte. So dass wir alle ein Bild bekommen, wie das Thema behandelt werden kann. Dann sieht auch jeder, der seine Meinung dazu hat, wofür die Mehrheit ist und kann sich daran orientieren. So weiß man auch von vornherein, wie ein Kommentar, den man abzugeben gedenkt, ankommen wird. Deshalb kann ich nur an Teilnahme an der Umfrage appellieren.
Ich hoffe, dass wir weiter kommen. Warum soll das Thema jetzt beendet sein? Stochri, Du hast das Thema gestartet, dann nimm die Sache in die Hand und bestimme, wie es weiter gehen kann.
MfG
- - - Aktualisiert - - -
Ja, genau das haben wir hier begonnen. KNNe haben eine Art Grundstock, der zunächst für viele Aufgabenstellungen tauglich ist. Der ist im Wesentlich nicht komplex und hat sich im Laufe der Entwicklung von KNNen etabliert. Gewisse Voraussetzungen, die Lernfähigkeit hervorbringen. MXT hat einen Link gepostet. Ich habe darauf Bezug genommen und versucht, einen Anfang zu gestalten. Sollte zeigen, wie man an so eine Sache rangehen kann. Wird als Unwissenheit abgetan und dann beginnen wir wieder mit der Suche nach dem absolut Essentiellen, von dem man weiter aufbauten kann.
Ich will jetzt nichts behaupten, aber für mich sieht es so aus, als ob die Thematik, im Ansatz, nicht verstanden wurde.
Geändert von Moppi (12.12.2019 um 13:35 Uhr)
ich trau mich mal aus der deckung:
was wir haben:
-ein paar leute, die sich auskennen
- ein paar mehr leute, die nicht so viel wissen, die aber interesse haben (kann man irgendwo sehen, wie viele z.b. dieses thema aboniert haben? Manf?)
- kaum jemmand wird einen "12F629" in der schublade haben, von der beschaltung und dem handling mal ganz zu schweigen, aber einen arduino? Hat wohl fast jeder. Manch einer sogar einen ESP32...
was wir nicht haben:
- lust auf rechthaberei oder streit
mein vorschlag wäre, dass sich einer, der sich auskennt, gedanken darüber macht, wie man zum KI und NN einen arduino nutzen könnte und schön step by step das ganze aufbaut. Von der beschaltung, bis hin zu basis der software, vielleicht mal einiges anhand von beispielen erklärt. Hinweise auf weblinks sind zwar manchmal hilfreich, hier wären sie nicht so gut passend ...
Dieser KI-tutorial sollte weder in Rumgucker's flapsiger noch mit (manchmal) HaWe's herablassender art erfolgen, da geht doch sicher noch was anders. Auch ein ganz neuer thread könnte es werden...
Nun, wer machts?
gruß inka
Ich gehe mal davon aus, dass niemand etwas dagegen hätte, nur in der Zeit bis soetwas von selbst passiert kann man ja unterschiedliche Erklärungen suchen die es schon gibt und vergleichen wie gut sie den Anforderungen entsprechen.mein vorschlag wäre, dass sich einer, der sich auskennt, gedanken darüber macht, wie man zum KI und NN einen arduino nutzen könnte und schön step by step das ganze aufbaut. Von der beschaltung, bis hin zu basis der software, vielleicht mal einiges anhand von beispielen erklärt.
Etwas in der Art wie hier oder eine der anderen.
https://www.youtube.com/watch?v=bxe2T-V8XRs
https://www.3blue1brown.com/neural-networks
https://www.youtube.com/watch?v=2-Ol7ZB0MmU
...
[nicht ernst gemeint]
Da gibt es so eine geflügelte Antwort: "Der, der fragt!"
Ok !
[/nicht ernst gemeint]
- - - Aktualisiert - - -
Wenn man das nicht jeden Tag macht oder schon längere Zeit mit dem Thema zu tun hat, ist es insgesamt eine Herausforderung. Wenn man das richtig aufdröseln und später auch noch im Aufbau und zweckbestimmt variieren will, muss man bis auf die unterste Ebene durchgestiegen sein. Wenngleich man nicht unbedingt den wissenschaftlichen Hintergrund im Detail verstanden haben muss. Aber die Grundfunktionen müssen "sitzen". Selbst das Beispiel von MXTs verlinkter Seite ist nicht gerade für Einsteiger die erste Wahl. Weil dort schon Indizes für mehrere Muster drin enthalten sind. Das spiegelt sich auch in den Formeln wider, die dann gleich noch etwas komplizierter werden. Das auf das Nötigste abzuspecken, ist für Einstiger in die Materie nicht so schnell gemacht. Gemeinsam würde es vielleicht schneller gehen.
Um aber nochmals auf den Kern zurückzukommen, folgendes.
DIE, programmiertechnisch und vom Verstehen der Materie her, einfachste Struktur für ein KNN gibt es eigentlich nicht.
Ein Beispiel ist die Aktivierungsfunktion. Wenn man die einfach linear gestaltet, stößt man früher oder später auf Probleme, die das Netz womöglich nicht lösen kann. Dasselbe gilt für Lernen aus Fehlern. In manchen Fällen funktionieren solche Funktionen besser und in anderen Fällen andere Funktionen, was die Lerngeschwindigkeit und Genauigkeit anbelangt. Es kann wohl auch zu so einer Art Dauerschleife im Netz kommen, wo das Netz nie zu einem Ergebnis kommt. Aus diesen und anderen Gründen werden in den Netzen oft nichtliniare Funktionen verwendet. Da geht es dann nicht mehr nur um "0" und "1" oder "an" und "aus", sondern da wird schon mal ein Tangensberechnung bemüht oder was anderes.
Ich bin aber nicht der Spezi für solche Dinge.
Vielleicht kann sich Stochri nochmal äußern, wie (oder mit welchen "Basics") er sich das vorstellt umzusetzen?
MFG
Ich bin mit dem Thema noch nicht durch, aber ich habe zumindest einmal den Linienfolgermechanismus mit einer Wahrheitstabelle getestet.
Als Quellcode habe ich den genommen, wo MXT den Link auf die Beispielseite gesetzt hat.
Es sind etwa 2400 bis 2800 Trainingszyklen notwendig, bis die vorgegebene Genauigkeit erreicht wurde. Die Werte, welche diese bestimmen, wurden aus dem Originalquelltext beibehalten.
Das Training dauert, auf einem nodeMCU ESP-12E, ca. 5 Sekunden.
Da es sich um analoge Berechnungen handelt, sind die Werte der Ausgabeneurone Fließkomma-Näherungswerte. Eine Berechnung im KNN stellt immer eine Annäherung dar.
Würden die Ausgaben, ohne Nachkommastellen, gerundet, erhielte man das gewünschte Ergebnis, als "0" oder "1".
Die Trainingszyklen variieren bei jedem Neustart, weil in den Berechnungen Zufallswerte mitspielen. So werden u.a. die Neuronengewichte Anfangs mit Zufallswerten und nicht mit immer gleichen festen Werten initialisiert.
Die Fließkommaergebnisse variieren genau so, weil es Näherungswerte sind und eben in den Berechnungen Zufallswerte mitspielen.
Im Input haben wir 2 Eingänge. Der Erste, für den linken Sensor. Der Zweite für den rechten Sensor. In der Mitte der Sensoren soll die schwarze Linie verlaufen.
Im Output haben wir 2 Ausgänge.
Der Erste, für den linken Motor, der langsam vorwärts fährt oder steht (0); oder schneller vorwärts fährt (1).
Der Zweite, für den rechten Motor, der langsam vorwärts fährt oder steht (0); oder schneller vorwärts fährt (1).
1. Wenn sich der linke Sensor neben der schwarzen Linie befindet (0), kann der linke Motor laufen (1).
2. Wenn sich der rechte Sensor neben der schwarzen Linie befindet (0), kann der rechte Motor laufen (1).
3. Wenn sich der linke Sensor auf der schwarzen Linie befindet (1), kann der linke Motor stehen oder langsam drehen (0).
4. Wenn sich der rechte Sensor auf der schwarzen Linie befindet (1), kann der rechte Motor stehen oder langsam drehen (0).
Das Ergebnis des neuronalen Netzes sieht dazu so aus; zum Vergleich wird Target (das Muster, auf das zuvor trainiert wurde) mit ausgegeben; Target ist eine Vorgabe und wird nicht durch das neuronale Netz erzeugt:
Input 0 0 Target 1 1 Output 0.98662 0.98579
Input 1 0 Target 0 1 Output 0.01587 0.99852
Input 0 1 Target 1 0 Output 0.99999 0.00660
Input 1 1 Target 1 0 Output 0.99995 0.01100
Input sind die Werte des linken und rechten Lichtsensors, auf die das KNN eine Ausgabe (Output) für den linken und rechten Motor erzeugen würde, um das Fahrzeug zu steuern.
Das stellt für mich jetzt den einfachsten Fall einer solchen Steuerung dar, den man mit einem KNN umsetzen kann. Sozusagen das Notwendigste. Das Trainingsset ist als Wahrheitstabelle fest vorgegeben und wird durch die CPU so lange abgearbeitet, bis die richtigen Reaktionen der Ausgänge, auf die Eingangssignale, stattfinden.
Verwendet habe ich 2 Eingangsneuronen, 2 versteckte Neuronen und 2 Ausgangsneuronen.
Mit einem versteckten Neuron funktioniert es auch. Die Ergebnisse sind dann etwas genauer, die Trainingsphase dauert aber ca. 9 Sekunden, bei ca. 9000 Zyklen:
Input 0 0 Target 1 1 Output 0.98612 0.98504
Input 1 0 Target 0 1 Output 0.01456 0.99999
Input 0 1 Target 1 0 Output 1.00000 0.00847
Input 1 1 Target 1 0 Output 1.00000 0.00998
Mit 10 versteckten Neuronen, ca. 900 Trainingszyklen, bei 4 Sekunden:
Input 0 0 Target 1 1 Output 0.98621 0.98668
Input 1 0 Target 0 1 Output 0.01535 0.99720
Input 0 1 Target 1 0 Output 0.99992 0.00877
Input 1 1 Target 1 0 Output 0.99469 0.00908
Mit 20 versteckten Neuronen, ca. 800 Trainingszyklen, bei 4 Sekunden:
Input 0 0 Target 1 1 Output 0.98555 0.98742
Input 1 0 Target 0 1 Output 0.01570 0.99923
Input 0 1 Target 1 0 Output 0.99999 0.00424
Input 1 1 Target 1 0 Output 0.99645 0.01238
Mit 50 versteckten Neuronen dauern die Berechnungen ca. 12 Sekunden, bei ca. 650 Trainingszyklen:
Input 0 0 Target 1 1 Output 0.98657 0.98793
Input 1 0 Target 0 1 Output 0.01528 0.99561
Input 0 1 Target 1 0 Output 0.99999 0.00667
Input 1 1 Target 1 0 Output 0.99218 0.01062
MfG
- - - Aktualisiert - - -
Übrigens ließe sich nach so einem Schema auch die in einem anderen Thread angezweifelte Waschmaschinensteuerung realisieren.
Geändert von Moppi (13.12.2019 um 20:26 Uhr)
hier sehe ich logische Unschärfen bzw. Unmöglichkeiten, denn langsam kann nicht gleichzeitig dasselbe sein wie stehen.langsam vorwärts fährt oder steht (0)
wenn also aus+langsam+schnell möglich sein sollen:
4 Ausgänge, 2 für motor0 und 2 für motor1:
Daher
out0 0 out1 0: motor0 steht
out0 0 out1 1: motor0 langsam vor
out0 1 out1 1: motor0 schnell vor
out2 0 out3 0: motor1 steht
out2 0 out3 1: motor1 langsam vor
out2 1 out3 1: motor1 schnell vor
hier hätte man dann sogar noch je 1 Kodierung für 1/0 frei.
bei 2 inputs und 4 outputs sind fürs Hiddenlayer 3-5 Neuronen sinnvoll und angemessen.
vgl. hier: https://www.roboternetz.de/community...l=1#post657215 (PS.)
Damit die Outputs eineindeutig sind, sollten sie mit der round() Funktion auf 0/1 ab/aufgerundet werden, sobald sie nach dem Lernen im laufenden Betrieb angewandt werden.
Dann lassen sie sich sogar (fast) direkt zur Pinsteuerung für H-Brücken verwenden.
Und natürlich gilt so etwas auch für Waschmaschinen, was definitiv auch nie von mir angezweifelt wurde.
Geändert von HaWe (13.12.2019 um 21:21 Uhr)
Lesezeichen