kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Übung

(EN google-translate)

(PL google-translate)

Aufgabe 1

  • Installieren Sie nachfolgende Library in Ihre Processing-Installation:
neuro.zip -- Library zur Erstellung neuronaler Netze mit Backpropagation und SDA.

Aufgabe 2

  • Öffnen Sie in Processing das Beispiel Neuro_DA_Wandler_Mini aus der neuro-Library.
  • Führen Sie das Beispiel aus.
  • Lesen Sie in dem Beispiel den Kommentar durch, worum es bei dem Beispiel geht.
Wieviele Gewichte gibt es bei dem Beispielnetz aus Neuro_DA_Wandler_Mini?

Hinweis: Es sind alle beteiligten Neuronenschichten vollständig vernetzt.

Aufgabe 3

  • In der setup-Methode von Neuro_DA_Wandler_Mini wird das Netz belernt.
  • Ergänzen Sie das Programm, indem Sie das Netz nach dem Lernvorgang benutzen.
  • D.h. Sie geben an den Eingang Zufallswerte und lassen das Netz den zugehörigen Ausgang produzieren.
  • Fügen Sie auch eine Kontrollausgabe hinzu, um prüfen zu können, ob das Netz richtig arbeitet.
Funktioniert das Netz auch für Werte, die zwischen den gelernten Input-Werten liegen?

Aufgabe 4

Exportieren Sie nach dem Lernvorgang im Sketch Neuro_DA_Wandler_Mini die Gewichte.

Hinweis: Ein Beispiel, wie Gewichte in einem File gespeichert und wieder benutzt werden können, finden Sie in den beiden anderen Library-Beispielen in neuro: TicTacToe50_LIBRARY und TicTacToe51_Turnier_NEURO_Library. TicTacToe50_LIBRARY: Hier werden Gewichte gelernt und gespeichert. Sie dort im Tab "Lerprozess" die Methode: public void speicherGewichteAlsInDatei(String name, iNetz netz).

Programmieren Sie dann auf möglichst direkte und einfache Weise selber ein neuronales Netz, das dem von Neuro_DA_Wandler_Mini entspricht und verwenden die exportierten Gewichte von dort. Es soll die sigmoide Funktion verwendet werden mit o(u) = 1/(1+exp(-u)).

Weitere Hinweise finden Sie im Skript:

67_Echtzeitsysteme/08_NeuronaleNetze/01_Neuron
Überprüfen Sie ob Ihr Netz die gleichen Ausgänge liefert, wie das aus Neuro_DA_Wandler_Mini, wenn beide mit exakt den gleichen Gewichten arbeiten.

Hinweis: Um das durchzuführen, müssen die zuvor exportierten Gewichte auch in einer Variante von Neuro_DA_Wandler_Mini wieder importiert und verwendet werden, da durch die zugrundeliegenden Zufallsprozesse bei jedem Lernvorgang leicht andere Gewichte herauskommen.

Aufgabe 5

Versuchen Sie nun auch selber einen Backpropagation-Algorithmus zu implementieren. Dieser muß lediglich genau für Ihr in Aufgabe 4 erstellten Netz funktionieren. Es muß also keine allgemeine Implementierung sein.

Überlegen Sie sich dazu zunächst genau, welche Gewichte und Neuronen jeweils beteiligt sind, wenn ein bestimmtes ausgewähltes Gewicht verbessert werden soll. Sie könnten dazu Ihr Netz aufzeichnen, ein Gewicht herausgreifen und dazu farbig markieren, was aus der Formel im Skript dann in Ihrem Netz wo zu finden ist.

Hier ist das entsprechende Kapitel im Skript:

67_Echtzeitsysteme/08_NeuronaleNetze/02_Backpropagation

Aufgabe 6

Schauen Sie sich in der Library-Referenz den Quelltext der Klasse Netz an und vergleichen insbesondere die Implementierung des SDA-Verfahrens mit der im Skript angegebenen Formel:

79_Deep_Learning/02_TicTacToe/03_SDA
Stimmt die Implementierung mit der Formel überein?

Aufgabe 7 -- Schnittstellen

Laden Sie sich das Projekt TicTacToe08_Turnier_P_korrigiert herunter:

79_Deep_Learning/02_TicTacToe/01_Rekursiv -- ganz unten.

Um das Konzept der Schnittstelle zu üben: Schreiben Sie selber einen TicTacToe-Spieler, in dem Sie einfach Ihre eigene Strategie mit Hilfe von Kontrollstrukturen (if...else) implementieren.

Lassen Sie dann Ihren Spieler gegen den optimalen Spieler antreten.

Aufgabe 8 -- Bilderkennung

Benutzen Sie das Ihnen mit der Library neuro bereitgestellte Framework, um ein neuronales Netz zur Bilderkennung zu schreiben.

Ihr Netz soll erkennen, ob Linienzüge in einem 4x4-Bild offen oder geschlossen sind.

Nachfolgend zeigen einige Beispiele, was gemeint ist. . soll dabei ein leerer Platz (weiss) in dem 4x4-Bild sein und # ein gesetztes Pixel (schwarz).


.###
.#.#
.#.#
.###


....
.#.#
.#.#
.###


###.
#.#.
....
....


....
####
##.#
.###


Code 0-1: Geschlossene und offene Figuren (Beispiele).

Überlegen Sie gut, wie Sie die Art und Lernmenge zunächst einfach und dann nach und nach immer schwieriger und allgemeiner gestalten können.

Überprüfen Sie im Verlauf Ihrer Arbeit, wann Under- und wann Overfitting bei Ihrem Netz geschieht und skalieren Sie ein neues Netz daraufhin in besserer Weise.

Schreiben Sie eine interaktive Anwendung, mit der es möglich ist, ein belerntes Netz auszuprobieren. Man könnte sich beispielsweise in einem Fenster eine Figur zusammenklicken und sie dann von Ihrem Netz beurteilen lassen.

Aufgabe 9 -- Verbesserung von neuro

Überlegen Sie sich, was man an neuro verbessern könnte, insbesondere:

  • Integrieren Sie eine Import- und Export-Funktion für gelernte Gewichte, oder noch besser für gelernte Netze.
  • Bringt es etwas die RELU-Funktion in den Hidden Layern zu benutzen?
  • Wären Visualisierungen für das arbeitende/lernende netz denkbar?

Im folgenden kann die neuro-Library samt einiger Skripte zu deren Generierung heruntergeladen werden:

Neuro_Library_erstellen.zip

Beachten Sie auch die Hinweise zum Erstellen von Processing-Libraries hier:

93_Android_Proc/02_Eigene_Library
Erstellen Sie auf dieser Grundlage eine eigene Neuro-Library.
Update der Library.
  • NEU: Klasse Netz besitzt jetzt eine Export-Funktion für Gewichte als Array und erzeugt alternativ gleich eine Funktion, die das Netz repräsentiert. Siehe dazu Beispiel DL_TicTacToe50_LIBRARY in Tab "Lernprozess" ganz unten: public void speicherGewichteAlsInDatei(String name, iNetz netz)
  • NEU: Effizientere Berechnung von Q in der Backpropagation-Funktion, vergl. dazu macheBackpropagation(double[] soll_ausgang, double lernfaktor) in Netz bei Library neuro mit neuerer Library deeplearning.
  • NEU: Veränderter Packagename: info.kramann.deeplearning.*
deeplearning.zip

Hinweis: Für die Übung kann nach wie vor weiter die Library neuro verwendet werden.


https://www.youtube.com/watch?v=SacogDL_4JU&list=PLrUdxfaFpuuLyYmu__kWChp_F0weDD6yj -- Neuronales Netz lernt Musik zu komponieren, Teil 1
https://www.youtube.com/watch?v=nA3YOFUCn4U -- Neuronales Netz lernt Musik zu komponieren, Teil 2