Hallo alle Zusammen,
da ich mich vor einiger Zeit unbedingt mal mit neuronalen Netzen beschäftigen wollte, habe ich im Internet (vergeblich) nach Beispielcode in Delphi gesucht.
Nach einem neuen Thread und vielen Stunden des Verzweifelns (und natürlich ganz viel Kaffee
) hab ich jetzt endlich einen brauchbaren Code.
Das Programm funktioniert folgendermaßen:
- Zuerst muss das Netz lernen, deshalb stellt man am Regler "Durchgänge" die Anzahl der Durchgänge ein (die genaue Anzahl wird in der Statusbar angezeigt).
Wenn man einen Rechner über 2GHz hat sollte man sich nicht scheuen, den Regler ganz nach rechts zu schieben
Die Lernkonstante (Störfaktor) kann bleiben, man kann allerdings auch damit experimentieren
Wird die Checkbox "Debug-Modus" aktiviert, so erstellt das Programm nach Abschluss der Lernvorgänge eine Datei
synapsen.txt auf C:\, in der für jedes Neuron die einzelnen Synapsenwerte (Gewichte) aufgelistet sind.
Jetzt kann man auf Lernen klicken und warten^^
- Den Abschluss des Lernvorgangs erkennt man daran, dass plötzlich eine Zahl auf der Panelfläche erscheint. Jetzt kann mit Hilfe der Trackbar unter den Panels eine Zahl angegeben werden, danach einfach auf Prüfen klicken et voilà.
Jetzt könnt ihr die Panels natürlich nach belieben verändern.
Zum Aufbau des Netzes:
Das neuronale Netz ist so gut es geht OO geschrieben, was bestimmt einigen bei näherer Betrachtung sehr unnötig erscheinen wird. Allerdings denke ich, dass es sich so einfacher erweitern lässt.
Es gibt nur zwei Neuronenschichten, eine Inputschicht mit 8*8 Neuronen, und eine Outputschicht mit 10 Neuronen, für jede Zahl 1 Neuron.
Der Programmierstil ist vielleicht nicht der sauberste, dafür habe ich den Code möglichst gut lesbar formatiert und dokumentiert.
Ich hoffe, dass jeder der an diesem Thema interessiert ist seine Kritik dazu äußert, gibt sicherlich ne Menge^^
Ps: Thx @ brinkee, die Idee des Programmaufbaus stammt von ihm
[Edit]Aus gegebenen Anlass noch schnell ein
Verweis auf einen anderen Thread, dass hier dargestellte "Pattern-Associator"-Netz ist vom Aufbau her identisch mit diesem hier, nur sauberer was Aufbau und Namensgebung angeht.[/Edit]