Auf dieser Seite wird die Mustererkennung mit einem neuronalen Netz zum automatisierten Erkennen von handgeschriebenen Ziffern angewendet. Die Grundlage bildet ein sogenanntes Hopfield-Netz. Es speichert zehn Musterziffern, die aus den 60 000 handgeschriebenen Ziffern der MNIST-Sammlung gemittelt wurden. Die gespeicherten Musterziffern werden selbst dann noch zuverlässig wiederhergestellt, wenn bis zu 30 Prozent ihrer Felder zufällig gestört sind. Handgeschriebene Ziffern weichen jedoch nicht zufällig, sondern in ihrer Form von diesen Mustern ab. Hier erkennt das Netz rund zwei Drittel der Ziffern richtig.
Zum Vergleich wird die Ziffer zusätzlich mit einem modernen Hopfield-Netz erkannt. Statt zehn Musterziffern in einer gemeinsamen Gewichtsmatrix zu überlagern, speichert es 5000 handgeschriebene Ziffern aus der MNIST-Sammlung einzeln. Die Eingabe wird mit allen verglichen, und je ähnlicher ihr ein gespeichertes Muster ist, desto stärker zählt seine Stimme für die eigene Ziffer. So werden rund neun von zehn Ziffern richtig erkannt. Die Prozentangabe hinter dem Ergebnis ist der Stimmenanteil der erkannten Ziffer. Sie lässt sich näherungsweise als Wahrscheinlichkeit lesen, dass die Erkennung stimmt, ist in Tests allerdings leicht zu optimistisch.
Noch bessere Ergebnisse liefern aufwendigere Ansätze wie ein «Multilayer-Perceptron» zusammen mit «Supervised Learning». Dabei lernt das Netz gezielt, an welchen Merkmalen sich die Ziffern unterscheiden.
Die Programmierung erfolgte in JavaScript (siehe Atwood's Law: «Any application that can be written in JavaScript, will eventually be written in JavaScript») unter Verwendung der jQuery-Bibliothek und des umfangreichen Vektorgraphik-Skripting-Pakets Paper.js («The Swiss Army Knife of Vector Graphics Scripting»). Die Aufbereitung der Ziffern (Preprocessing) erfolgt in Python, die eigentliche Erkennung mit den beiden Hopfield-Netzen ist in PHP programmiert.
Alle Programme bzw. Skripte wurden im Visual Studio Code-Texteditor geschrieben.
Bei allen verwendeten Programmierwerkzeugen und -sprachen handelt es sich um um sog. «open source»-Produkte.
Bitte hier – möglichst unter Ausnutzung der vollständigen Fläche – eine Ziffer (0, 1, …, 9) schreiben, anschliessend die Taste «erkennen» drücken:
Das karierte Notizpapier oben hat eine Auflösung von 28 × 28 = 784 binären Bildpunkten, ungefähr so viele, wie ein Facettenauge der Taufliege Einzelaugen besitzt. Die Sehzellen der Fliege – wie jene in der Netzhaut des Menschen mit ihren über 120 Millionen Sinneszellen – sind dagegen helligkeitsempfindlich und können Farben unterscheiden.
Vor der Erkennung mit dem neuronalen Netz wird die gezeichnete Ziffer als normierter Streckenzug aufbereitet: Sie wird leicht geglättet, bei schräger Schrift gerade gedreht und anhand eines umgebenden Rechtecks (sog. Bounding Box) unter Wahrung des Seitenverhältnisses auf die volle Fläche des Notizpapiers vergrössert. Zum Schluss wird sie mit ihrem Schwerpunkt in die Mitte gerückt und mit gleichmässig dickem Strich neu gezeichnet.
Es gibt keine Radiergummi-Funktion. Um die Zeichnung zu löschen, muss entweder der Knopf «löschen» gedrückt oder die Seite neu geladen werden.
Beim schnellen Zeichnen werden bei der Rasterung nicht alle überstrichenen Felder blau markiert, weil nur die Punkte geprüft werden, welche die Maus tatsächlich meldet. Auf die Erkennung hat dies keinen Einfluss, da sie mit dem vollständigen Strich arbeitet.
Die eingegebene Zahl:
Zentriert und skaliert:
Die erkannte Zahl:
klassisches Hopfield-Netz:
modernes Hopfield-Netz:
Copyright 2026, parkrace.ch