Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Neuronales Netz - Wie kann es sich mehrere Dinge merken? (https://www.delphipraxis.net/100713-neuronales-netz-wie-kann-es-sich-mehrere-dinge-merken.html)

Flips 2. Okt 2007 23:20


Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Hi.

Ich weiß, es gab in letzter Zeit viele Themen zu neuronalen Netzen.
Bis jetzt hab ich auch mit Hilfe von Google alles hinbekommen und bin nun soweit, das ich ein Programm habe welches aus 8*8 Panels (weiß oder schwarz) die Zahl 1 erkennt.
http://owned.ow.funpic.de/wichtig/panels.PNG
Soweit sogut.
Wenn ich das Programm jetzt aber so modifizieren will, dass es alle Zahlen von 0-9 erkennt, dann komm ich rein theoretisch nicht dahinter, wie EIN Netz 10 verschiedene Muster erkennen und zuordnen kann.

DAS es geht weiß ich, wurde ja hier schon gezeigt.

Korrigiert mich, wenn ich was falsch verstanden haben, aber das Lernen einer Zahl läuft doch so ab:
- Lege die Zahl fest (in meinem Fall: 1)
- SCHLEIFE START
- Erstelle eine Zufallszahl zwischen 0-9
- Wenn die Zufallszahl = 1, dann muss im Output nachher 1 stehen, wenn nicht dann 0
- Lerne aus den Fehlern
- SCHLEIFE ENDE

So, jetzt hat sich das Netz auf die 1 eingelernt, klappt ja auch soweit.
:?: Wenn ich das ganze jetzt für die 2 wiederhole, dann sind doch die Gewichte usw. für die 1 "weg", oder?

:?: Ich könnte die Gewichte vorher in eine Datei speichern, aber das muss doch irgendwie einfacher gehen, oder???

Thx!!!

Reinhard Kern 3. Okt 2007 00:02

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Zitat:

Zitat von Flips
Hi.

...
Wenn ich das Programm jetzt aber so modifizieren will, dass es alle Zahlen von 0-9 erkennt, dann komm ich rein theoretisch nicht dahinter, wie EIN Netz 10 verschiedene Muster erkennen und zuordnen kann.
...
Ich könnte die Gewichte vorher in eine Datei speichern, aber das muss doch irgendwie einfacher gehen, oder???

Thx!!!

Hallo,

wenn ein Netz 2 Muster erkennen soll, muss es 2 Ausgänge haben usw.

Gruss Reinhard

Dunkel 3. Okt 2007 00:37

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Zitat:

Zitat von Reinhard Kern
wenn ein Netz 2 Muster erkennen soll, muss es 2 Ausgänge haben usw.

Vielen Dank für diese Info! :thumb: Das ist gut zu wissen.

Das verkompliziert mein Vorhaben mit KNN doch erheblich; in sofern stelle ich das zuerst mal hinten an. Gut, dass ich noch nicht großartig angefangen habe. :stupid:

Flips 3. Okt 2007 10:31

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Hi.

Das heißt in meinem Fall also, dass das Netz 10 Ausgänge haben muss?
Kennt nicht zufällig jemand ne gute und einfach Implementierung, abgesehn von der einen OS-Geschichte im Forum?
Oder ein Tutorial was im wesentlichen auf die Implementierung, und nicht auf die Theorie abzielt?

Phoenix 3. Okt 2007 10:56

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Nein, Du brauchst nur 4 Ausgänge. Die Ausgabe eines NN ist Binär.

Flips 3. Okt 2007 11:11

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Achso...hm ok, das ändert das ganze schon um einiges^^

Flips 3. Okt 2007 11:42

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Mhh oder auch nicht, auf brinkee's Website steht in seiner Facharbeit folgendes:
Zitat:

Zur Vereinfachung sollen hier keine Buchstaben, sondern nur die Zahlen von 0 bis 9
identifiziert werden können, weswegen 10 Ganglienzellen benötigt werden, welche die
Output-Schicht bilden.
Dann ist die Ausgabe hier aber nicht binär

HERMES 3. Okt 2007 12:33

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Das ist auch ein binärer Code (1 aus 10 Code), du könntest genauso gut irgendeinen anderen binären Code verwenden, wie Beispielsweise Grey oder BCD.

Reinhard Kern 3. Okt 2007 13:07

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Zitat:

Zitat von HERMES
Das ist auch ein binärer Code (1 aus 10 Code), du könntest genauso gut irgendeinen anderen binären Code verwenden, wie Beispielsweise Grey oder BCD.

Hallo,

das ist bei einem NN eben wurscht - die Beziehung Eingang - Ausgang wird gelernt, und wenn der Ausgang eben BCD sein soll, wird die BCD-Kodierung mitgelernt. Natürlich müssen dann die Lerndaten auch so sein, mit BCD als Soll.

Gruss Reinhard

Edit: die Zahl der Ausgänge darf man nicht überbewerten - das Netz muss komplex genug sein, um z.B. für Buchstabenerkennung 256 Zustände zu unterscheiden, ob dazu 256 Ausgänge gebraucht werden oder nur 8, ist zweitrangig. Bitte NICHT fragen, wie komplex das Netz genau sein muss.

Reinhard

Flips 3. Okt 2007 18:01

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
So, ich habes es endlich geschafft.
Das Netz funktioniert, werde es eventuell bald mitsamt Source hochladen.
Noch zum Aufbau: Habe jetzt 10 Output-Neuronen genommen, während der Programmierung ist mir klar geworden das es natürlich wie schon erwähnt auch binär kein Problem ist.

Danke an alle!!! :thumb:

brinkee 3. Okt 2007 18:29

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Hi Flips,

wenn Du die Infos doch aus meinem Post und von meiner Seite hast, wieso fragst Du dann nicht einfach mich, wie ich das realisiert habe. Die Facharbeit ist übrigens nicht von mir, sondern ich habe sie wegen des passenden Themas nur auf meiner Homepage zur Verfügung gestellt.

Damit Du nicht nachher ein funktionierendes NN hast, was Du niemandem erklären kannst:

1.) Wichtig dabei ist, dass man eine Input-Schicht, eine Output-Schicht (eventuell auch Zwischenschichten) und die Verknüpfungen dazwischen erzeugen muss.
2.) Die Input-Schicht besteht aus deinen 8x8 (oder bei mir 10x10, oder auch beliebig vielen) Eingabe-Pixeln.
3.) Die Ausgabe-Schicht kann entweder aus allen möglichen Werten bestehen, die das Netz erkennen soll, oder in beliebiger Art codiert auch anders
4.) Die Synapsen stellen die Verbindung her. Sie verbinden jedes Neuron der Input- mit jedem Neuron der Output-Schicht
5.) Damit man es richtig implementiert, dürfen die Neuronen der Output-Schicht in keiner Art und Weise ein "Kennt-Beziehung" o.Ä. zur Inpu-Schicht haben. Der Informationsdurchsatz in der Abfrage Phase (also nicht im Training) darf nur von Input zu Output stattfinden.
6.) Das Ergebnis der Abfrage wird erreicht, indem die Synapsen, die von aktivierten Input-Neuronen ausgehen, erregt werden. Das heißt, dass ihr "Gewicht", was aus dem Training herrührt, an die Output-Neuronen weitergereicht wird. Das Nuron mit dem größten Wert hat dann so zu sagen gewonnen.

Ich weiß, dass meine Implementierung eine Minimalversion darstellt, und noch nicht alle mathematischen Vorraussetzungen erfüllt. Allerdings ist sie objektorientiert implementiert und kann beliebig angepasst werden.

Hoffe, dass ich ein wenig zum Verständnis beigetragen habe,

Markus

Flips 3. Okt 2007 18:35

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Ja das hast du, ich bin sicher dein Post hätte mir gestern noch geholfen^^
Was ich allerdings merke ist, dass dein Programm fast genauso aufgebaut ist wie deins, und bis jetzt sehr viel weniger Code hat (was ja nichts heißen soll)

Ich arbeite noch ein paar Fehler aus und kommentiere den Quelltext, dann stelle ich es mal online.

brinkee 3. Okt 2007 18:55

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Hi Kollege,
na, es kann sein, dass du weniger Code hast und das Programm das gleiche leistet. Jedoch - ein endgültiges Urteil werde ich mir erst erlauben, wenn ich deinen Code gesehen habe - habe ich Wert darauf gelegt, dass das Netz an sich sauber objektorientiert implementiert ist. Da kann es schonmal sein, dass man etwas "quellcodeseitig" umständlicher erarbeitet - für den Speicheraufwand nachher ist das aber entscheidend.
Ausserdem habe ich die Klassen so entworfen, dass man sie universell einsetzen kann, nicht nur für ein Projekt.
Das Testprogramm an sich ist nur eine "quick-and-dirty"-Strickerei, die zeigen soll, wie die Klassen funktionieren.
Was man nämlich nachher mit ihnen anstellen kann geht weit über das Erkennen von Zahlen hinaus. Zur Zeit arbeite ich an der Erkennung von Geldscheinen, einer Erkennung für geometrische Figuren auf dem Bild einer Webcam und ich versuche mich an der erkennung biometrischer Merkmale an den Umrissen von den Blättern zweikeimblättriger Pflanzen - alles mit den selben Units.

Also: wenn ich Dir mit dieser kleinen Belehrung über objektoriertes Programmieren auf die Füße getreten sein sollte - sorry!
Ansonsten erzähle ich dir gerne mehr.

Lieber Gruß,
Markus

(edit) P.S.: Vielleicht hängt es bei Dir ja auch irgendwann einmal an der Unterscheidung einer 8 und einer 3 ;) Man kann da schon länger dranhängen, sage ich Dir :D

(edit) Sorry für die ganzen edits: Für alle, die den Thread bei OpenSource nicht gelesen haben und mein Programm nicht kennen - markusbrinkmann.net

Flips 3. Okt 2007 20:04

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Hi.

Keine Angst, meins is auch OO, allerdings ziemlich sinnlos, da ich nicht wie du auf die Universelle Einsetzbarkeit hingearbeitet habe, sondern wie du bereits sagtest auf das spezielle Projekt.
Ich denke, ich werde versuchen es in mein Webcam-Überwachungsprojekt zu integrieren.
Ich bin sowieso davon überzeugt, dass dein Programm allgemein "besser" ist :-D
Bin ja erst blutiger Anfänger in sachen NN-Programmierung :wink:

brinkee 3. Okt 2007 22:59

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Hehe,

das ist natürlich eine gesunde Einstellung. :D Bin gespannt auf Deinen Code. Was hast Du mit dem Netz vor? - Nur wenn ich fragen darf.

Lieber Gruß,
Markus

Flips 4. Okt 2007 14:16

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Nun ja, die Fähigkeit eines NN zu lernen, was wichtig ist un was nicht, wollte ich nutzen um meiner Webcam-Überwachung die nötige "Intelligenz" zu verleihen.
Bisher läuft es nach dem Motto
Code:
Wenn AbweichendePixel > Schwellenwert dann
  GibAlarm
Wenn das Bild wie bei meiner schlechten Webcam flimmert, dann ist das schon ein echtes Problem (Wobei ich einen Anti-Flimmer-Algorithmus entwickelt habe, allerdings nur SW un nicht das Gelbe vom Ei :wink: ).
Daher wäre so ein neuronales Netz, das lernt, dass im oberen rechten Ecken zu 99% immer nur Schwarz ist sehr praktisch, damit falls da mal ein heller Flimmer-Pixel hinkommt, kein Alarm ausgelöst wird, weil das Netz weiß : "Hier ist mal weiß, das interessiert aber nur wenig -> vernachlässigen"

Nur so als Beispiel, in dem Zusammenhang kann man das bestimmt noch weiter Ausführen.

Reinhard Kern 4. Okt 2007 14:49

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Zitat:

Zitat von Flips
Nun ja, die Fähigkeit eines NN zu lernen, was wichtig ist un was nicht, wollte ich nutzen um meiner Webcam-Überwachung die nötige "Intelligenz" zu verleihen.
Bisher läuft es nach dem Motto
Code:
Wenn AbweichendePixel > Schwellenwert dann
  GibAlarm
Wenn das Bild wie bei meiner schlechten Webcam flimmert, dann ist das schon ein echtes Problem (Wobei ich einen Anti-Flimmer-Algorithmus entwickelt habe, allerdings nur SW un nicht das Gelbe vom Ei :wink: ).
Daher wäre so ein neuronales Netz, das lernt, dass im oberen rechten Ecken zu 99% immer nur Schwarz ist sehr praktisch, damit falls da mal ein heller Flimmer-Pixel hinkommt, kein Alarm ausgelöst wird, weil das Netz weiß : "Hier ist mal weiß, das interessiert aber nur wenig -> vernachlässigen"

Nur so als Beispiel, in dem Zusammenhang kann man das bestimmt noch weiter Ausführen.

Hallo,

vorab, weil du ja in Pixeln sprichst: eine Kamera in VGA-Auflösung hat ca 300000 davon, ein entsprechendes NN also 300000 Eingangsneuronen... natürlich kann sich jeder soviel Hard- und Software installieren wie er meint, ich wollte nur drauf hinweisen.

Generell geht die Diskussion hier an Teilen des Problems vorbei. Das NN ist, selbst wenn es steht, längst nicht alles, es muss ja erst was lernen, und dabei ist es NICHT damit getan, dem NN perfekte Ziffern von 0 - 9 zu präsentieren, sondern es müssen alle vorkommenden Ausformungen dabei sein und natürlich auch fehlerhafte Bilder jeder Art. Wenn man nicht auf reale Datenbestände zurückgreifen kann (z.B. die Fingerabdrucksammlung des BKA für eine entsprechendes Erkennungssystem) wird die Erstellung der Lerndaten sehr aufwendig.

Im Beipiel Webcam bräuchte man also eine Sammlung von "harmlosen" und "gefährlichen" Bildern jeder denkbaren Zusammensetzung - woher nehmen??

Gruss Reinhard

brinkee 4. Okt 2007 14:52

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Ja, richtig. Man muss ich immer genau darüber im klaren sein, was ein NN so kann und was nicht. Die richtigen Vorraussetzungen für die Arbeit des Netzes zu schaffen ist wichtig. Deshalb muss man aus Bildern, vor allem aus denen von Webcams, erstenmal die wichtigsten Daten exrapolieren.

Bei der Erkennung von Nummernschildern könnte das so aussehen:
1.) Man sucht sich im Bild ein (halbwegs) schwarz umrandetes weißes Viereck, bei dem ein bestimmtes Verhältnis von Breite zu Höhe vorliegt (innerhalb gewisser Toleranzen)
2.) Man sucht sich alles raus, was nicht zusammenhängt.
3.) Punkte wie die TÜV-Plakette raus
4.) Dann die Buchstaben und Zahlen Vektorisieren und dem Netz in schön normierter Form zu futtern geben

Es gibt 562 verschiedene Orte/Kreise, die die ersten 1-3 Buchstaben eines Kennzeichens ausmachen.
Weiter gibt es die Formate mit zwei Buchstaben und drei Ziffern und das mit 3 Buchstaben und zwei Ziffern. Kommunen fahren oftmals Kennzeichen mit bloß 4 Ziffern.


Macht also:

10^4 = 10.000 Möglichkeiten für die Kommunen
26^2 * 10^3 + 26^3 * 10^2 = 676.000+1.557.600 = 2.233.600 Möglichkeiten für Otto-Normal-Verbraucher
-------
562 * (10.000 + 2.233.600) = 1.260.903.200 Mögliche Autokennzeichen

Ich hoffe, ich habe jetzt auf die Schnelle keine groben und peinlichen Rechenfehler gemacht :nerd:
Aber das sind schon ein paar Autos, die man da erkennen könnte. Ist zwar schon tausendmal gemacht worden, sowas. Aber naja, ähnlich ist es mit den Captchas ja auch.

Um auf den Einwand von Reinard einzugehen:
Sicherlich macht es null Sinn, das komplette Bild in ein NN zu "laden". Es käme mit der Flut aus unterschiedlichen Zuständen nicht klar. Aber wenn man das Bild schön monochrom macht, sich nur die Objekte rauspackt, die sich bewegen, dann kann man mit dem Netz schon beispielsweise zwei unterschiedliche Kuscheltiere oder ähnliches Unterscheiden. Wenn es dann die Barbie ist, kann man sie automatisch abschießen, oder was auch immer :D



LG, Markus

Flips 5. Okt 2007 10:15

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Nun ja, ist mir schon bewusst, dass das ne enorme Datenmenge wäre.
Allerdings geht es mir ja im Vorfeld darum, dass ein anderer Algorithmus (oder der Mensch, der das Programm bedient?) wichtige und unwichtige Stellen im Bild erkennt (markiert). Wenn man den Blick jetzt beispielsweise auf eine Tür fixiert, dann sind die Inputneuronen natürlich nur die Pixel,welche die Tür beschreiben, wobei man ja je nach Größe der Tür auch noch sagen wir 4*4 Pixel zu einem Neuron (oder eben 4*4 Inputs zu einer Hidden-Unit) zusammen fassen könnte. Jetzt nur mal als Beispiel.

OregonGhost 5. Okt 2007 10:52

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Vor einiger Zeit, irgendwann im Studium, habe ich mich auch mal mit neuronalen Netzwerken beschäftigt. Dabei hatte ich einen wunderschönen, ausführlichen Artikel über Gesichtserkennung mit neuronalen Netzwerken, der auf viele der in diesem Thread beschriebenen Probleme einging. Leider finde ich den Link dazu nicht.
Dieses System ging das gesamte Bild durch, indem es von winzigen bis riesigen Größen alle möglichen Rechtecke auf dem Bild durchging und dann dieses Rechteck als Eingabe für das neuronale Netz verwendete. Das neuronale Netz hatte als Ergebnis die Frage, ob in diesem Rechteck ein Gesicht liegt. Es war zwar nicht übermäßig performant, aber erreichte auf damaligen Rechnern eine Zeit von etwa sieben Sekunden für ein Webcam-Bild.
Irgendwo auf codeproject.com sollte auch noch ein Artikel dazu liegen (aber auch den konnte ich nicht auf Anhieb finden).
Um die Netzwerke wirklich effizient einzusetzen, sollte man jedenfalls in der Tat die Eingabedaten reduzieren und, ebenfalls wichtig, aufbereiten. Für eine Kennzeichenerkennung wäre es also beispielsweise hilfreich, die Buchstaben farblich sehr deutlich von ihrer Umgebung zu separieren. Auch eine Kantenerkennung kann hier hilfreich sein. Nicht sinnvoll wäre hingegen, vom Netz zu erwarten, dass es das gesamte Kennzeichen erkennt - eher kann ein Netz versuchen, das Kennzeichen als ganzes im Bild zu finden (ähnlich wie die Gesichtserkennung), und ein zweites Netz kann es dann Buchstabe für Buchstabe durchgehen und jeden Buchstaben erkennen.

brinkee 5. Okt 2007 12:43

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
D'Accord ;)

brinkee 27. Okt 2007 09:51

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Na, wann wirds denn was mit dem Code?

LG, Markus

Flips 27. Okt 2007 14:35

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Entschuldigung, den hatte ich ganz vergessen^^ :oops:
Er wird heute noch online stehn!!

DGL-luke 27. Okt 2007 14:44

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Also für Nummernschildererkennung reicht doch ein etwas angepasster OCR-Algo bzw. NN für OCR.

Also ein NN, das 5 Buchstaben und 4 Ziffern ausspuckt.

Davorgeschaltet dann etwas, das Nummernschilder filtert und normalisiert, kann natürlich auch ein NN sein.

EDIT: -.-

Genau das hat OregonGhost schon gesagt---

brinkee 1. Nov 2007 09:18

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?
 
Genau das hat jeder hier schon gesagt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz