|
DAY BY DAY
(EN google-translate)
(PL google-translate)
Der E-Test "Informatik Ergänzungen / Deep Learning BMT5" findet am Mittwoch den 22.01.2020 ab 10:15 IWZ135 im IWZ135 statt.
Di 26.11.2019, 08:30-10:00
Mi 27.11.2019, 08:30-14:00
Implementierung eines Beispiels des Helmholtz-Prinzips
Literatur: Desolneux et al. "From Gestalt Theory to Image Analysis"
- P: Wahrscheinlichkeit, dass eine bestimmte Gestalt zufällig irgendwo im Bild entsteht
- N: Anzahl der Möglichkeiten, wo man nachschauen kann, ob diese Gestalt dort im Bild vorhanden ist
- E = N*P Erwartungswert, wie oft man die Gestalt im Bild wahrscheinlich in einem Zufallsbild gleicher Pixelanzahl wie das untersuchte finden wird.
|
Im Unterricht entwickelte aufeinander aufbauende Beispiel-Implementierungen des Helmholtz-Prinzips:
Helm001.zip -- Bilder laden und Umwandlung in Matrix mit Processing
Helm002_kantenfilter.zip -
Helm003_helmholtz.zip -- Implementierung des Helmholtzprinzips: Wagerechte und senkrechte Linien bestimmter Pixelanzahl mit bestimmte "Löcheranzahl" werden gesucht / gezählt
Helm004_helmholtz_draw.zip -- zeichnet gefundene Linien ein, die den geforderten Kriterien entsprechen
Helm005_helmholtz_draw.zip -- andere Schwellwerte als bei 004
Helm006_random.zip -- Vergleich: Wieviele Linien werden tatsächlich in einem Zufallsbild gleicher Pixelanzahl gefunden?
Di 03.12.2019, 08:30-10:00
SOM -- Self Organizing Maps
https://de.wikipedia.org/wiki/Selbstorganisierende_Karte
Aufgabe 1
- Eingangsvektoren eines 2D-Kohonen-Netzes sind beliebige RGB-Farben.
- Zu Beginn werden die Gewichte des 2D-Netzes zufällig mit RGB-Werten initialisiert.
- Nach genügend vielen Lernschritten prägen sich Farbbereiche auf dem topologischen Netz aus.
- Visualisieren Sie die sich ergebenden gelernten Gewichte als Farben.
|
Kohonen101.zip
Kohonen102.zip
Kohonen103_BUNT.zip
Kohonen104_fertiges_Netz_testen.zip
Aufgabe 2
- Schreiben Sie ein Programm, das für eine Natürliche Zahl bestimmt, wie oft in ihr die Primfaktoren 2,3,5 und 7 vorkommen.
- Jede natürliche Zahl x kann somit dargestellt als x = 2^p * 3^q * 5^r * 7^s * REST.
- p,q,r,s sollen als vierdimensionaler Stimulus für ein Kohonen-Netz verwendet werden.
- Belernen Sie ein 2D-Kohonen-Netz mit den ersten 100 natürlichen Zahlen.
- Erzeugen Sie eine 2D-Karte, in der die ersten 200 natürlichen Zahlen organisert dargestellt werden.
|
Di 10.12.2019, 08:30-10:00
- Einführung in Neuronale Netze mit dem Perceptron.
- Beispiele aus der Industrie: Cognimem / Fische sortieren
- Implementierung eines NN / einfache Optimierung
|
67_Echtzeitsysteme/08_NeuronaleNetze
Neuron3.zip -- Neuronen-Anzahlen pro Schicht: 2-4-1
Mi 11.12.2019, 08:30-14:00
- Theorie zum Backtracking-Verfahren
- Implementierung
|
NeuronameNetze001.zip
Di 16.12.2019, 08:30-10:00
DL_XOR_Gatter.zip -- Musterlösung zur allgemeinen Implementierung eines NN mit Backpropagation-Algorithmus.
Bild 0-1: Ergebnis nach einem Trainigslauf mit 10000 Schritten bei einer Lernrate von 0.1
public void setup()
{
NetzTicTacToeSpielerNEU netz = new NetzTicTacToeSpielerNEU();
netz.erzeugeNetz(new int[] {2,3,2});
double[][][] inout =
{
{{0,0},{ 1,0}},
{{0,1},{ 0,1}},
{{1,0},{ 0,1}},
{{1,1},{ 1,0}}
};
Random zufall = new Random(System.currentTimeMillis());
println("XOR-Netz vor dem Trainig:");
for(int i=0;i<inout.length;i++)
{
double[] out = netz.propagiereEingangzumAusgang(inout[i][1]);
println("Input: "+inout[i][0][0]+" "+inout[i][0][1]
+" Soll-Output:"+inout[i][1][0]+" "+inout[i][1][1]
+" Ist-Output:"+out[0]+" "+out[1]);
}
for(int i=0;i<10000;i++)
{
int index = zufall.nextInt(inout.length);
netz.propagiereEingangzumAusgang(inout[index][1]);
netz.macheBackpropagation(inout[index][1], 0.1);
}
println("XOR-Netz NACH dem Trainig:");
for(int i=0;i<inout.length;i++)
{
double[] out = netz.propagiereEingangzumAusgang(inout[i][1]);
println("Input: "+inout[i][0][0]+" "+inout[i][0][1]
+" Soll-Output:"+inout[i][1][0]+" "+inout[i][1][1]
+" Ist-Output:"+out[0]+" "+out[1]);
}
}
Code 0-1: Aufbau und Training eines Netzes am Beispiel eines XOR-Gatters (mit zweitem invertiertem Ausgang) aus NeuronameNetze001.
- Analysieren Sie die objektorientierte Implementierung eines NN aus obigem Beispiel.
|
- Setzen Sie ein eigenes Anwendungsbeispiel um, bei dem Buchstaben O und E unterschiedenwerden kann.
- Eingang: Array aus 5x5 Neuronen, die das zu erkennende Bild bestehend aus Einsen (schwarz) und Nullen (weiß) repräsentieren.
- Fertigen Sie mehrere Trainigssätze mit ansteigendem Schwierigkeitsgrad an (erster nur ein E und ein O, später mehrere Variationen)
- Prüfen Sie mit einem Testsatz, ob auch bei leichten Störungen (einzelner Pixel falsch gesetzt), einem Bild noch der richtige Buchstabe zugeordnet werden kann.
|
E_O_T_Lernen.zip -- studentische Lösung
Mi 17.12.2019, 08:30-14:00
- Einführung in Deep Learning (SDA-Verfahren)
|
79_Deep_Learning/02_TicTacToe/03_SDA
Di 07.01.2020, 08:30-10:00 / Mi 08.01.2020, 08:30-14:00
DL_AND_Gatter3.zip -- Backpropagation einfaches Beispiel
DL_AND_SCRATCH221.zip -- Übertragen der Gewichte auf "fest verdrahtetes" Netz, UPDATE: Speichern, Laden Double-Array.
Schweber001.zip -- Präsentation: Beispiel für Bestärkendem Lernen (Reinforcement Learning -- RL)
Schweber012.zip -- Endversion
- Testweiser Vergleich zwischen einfachem Backpropagation und Deep-Learning
- Beispiel: 2-Bit Mustervergleicher,
- Belerne 0 als 0.25 und 1 als 0.75
- Wahrheitstabelle:
|
Wahrheitstabelle zum 2-Bit Mustervergleicher
A1 A0 B1 B0 OUT
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 0
Code 0-2: 1 1 1 1 1
- Passendes Netz für Backpropagation suchen
- Vergleich bei Verwendung von SDA Pretraining
- Zusatzschichten einfügen für Backpropagation
- Erneuter Vergleich mit SDA
|
TicTacToe36_Neuro_mehr_Pretraining.zip -- Software-Grundlage für Beispiel
- Wesentlich weniger Lernschritte mit Pretraining gegenüber nur Backpropagation bei flachen Netzen.
- Tiefes Netz kann nur MIT Pretraining belernt werden.
|
SDA_Bitvergleicher_001.zip -- Flaches Netz, Backprop.
SDA_Bitvergleicher_002.zip -- Flaches Netz, Backprop. mit Pretraining (Deep Learning)
SDA_Bitvergleicher_deeep_003.zip -- Tiefes Netz nur Backpropagation (funktioniert nicht)
SDA_Bitvergleicher_deeep_004.zip --Tiefes Netz mit Pretraining und anschließend Backpropagation (funktioniert gut)
Di 14.01.2020, 08:30-10:00
- Themenbesprechung zur Klausur
- Wiederholung der fünf Themen:
|
- Helmholtz-Prinzip
- Kohonen-Netze
- Neuronale Netze mit Backpropagation
- Neuronale Netze mit Pretraining
- Genetische Algorithmen
|
Mi 15.01.2020, 08:30-14:00
Übungsaufgaben
Aufgabe 1
- Eine Sequenz der Länge 9 bestehe aus As und Bs.
- Bestimmen Sie abhängig von allen Denkbaren Anteilen an As und Bs in der Sequenz die NFAs für folgende Gestalt:
- Mindestens an zwei der Plätze 0,3,6 sitzt ein A. (Erster Platz hat Index 0, letzter 8)
- Schauen Sie sich zum besseren Verständnis die nachfolgenden Beispiele an:
|
Beispielsequenz mit 3*A und 6*B: ABBABBABB
Beispielsequenz mit 0*A und 9*B: BBBBBBBBB
Platz-Index: 012345678
Code 0-3: Beispielsequenzen
Aufgabe 2
- Schreiben Sie ein Programm, das für eine Natürliche Zahl bestimmt, wie oft in ihr die Primfaktoren 2,3,5 und 7 vorkommen.
- Jede natürliche Zahl x kann somit dargestellt als x = 2^p * 3^q * 5^r * 7^s * REST.
- p,q,r,s sollen als vierdimensionaler Stimulus für ein Kohonen-Netz verwendet werden.
- Belernen Sie ein 2D-Kohonen-Netz mit den ersten 100 natürlichen Zahlen.
- Erzeugen Sie eine 2D-Karte, in der die ersten 200 natürlichen Zahlen organisert dargestellt werden.
|
Aufgabe 3
Unter nachfolgendem Link finden Sie ein Neuronales Netz mit drei Neuronen
und Angaben zu allen Gewichten:
75_Echtzeit3/01_NeuronaleNetze/01_Neuron
Bestimmen Sie von Hand jeweils den Ausgang zu der Eingangskombination a) in0=1, in1=0 und
b) in0=0, in1=1. Setzen Sie dazu d=1 in der sigmoiden Funktion.
Führen Sie von Hand einen Backpropagationschritt mit a) als Eingang durch.
Setzen Sie dazu d=1 in der sigmoiden Funktion und den Lernfaktor auch auf 1.
Warum ist es wenig sinnvoll einen so großen Lernfaktor zu verwenden?
Aufgabe 4
Grundlage für die verwendeten Variablennamen bildet folgendes Tafelbild zum SDA-Verfahren:
79_Deep_Learning/02_TicTacToe/03_SDA, SIEHE BILD 2.3-3: Vorwärts-Rückwärts-Propagierung (Encoding / Decoding)
Nehmen Sie das gleiche Netz wie in Aufgabe 3. Bestimmen Sie von Hand y (Ergebnis beim Vorwärts/Rückwärts Propagieren), wenn das Rauschen auf den Eingang
a) so beschaffen ist, dass sich für n ergibt: n0=in0+noise=1+0.1, n1=in1+noise=0-0.1 (vergl. Tafelbild)
- Was wird beim SDA-Verfahren für eine Verbindungsschicht angestrebt zu lernen?
- Welchen Vorteil bringt dieses Pretraining?
|
Zusatzaufgabe
- Weisen Sie nach, dass das SDA-Verfahren benutzt werden kann, um Muster zu rekonstruieren.
- Führen Sie dazu ein Pretraining mit Es und Os in einem 25,25-Netz durch.
- Prüfen Sie dann nach, inwiefern Es oder Os mit fehlenden Pixeln automatisch ergänzt werden.
|
Aufgabe 5
Schauen Sie sich noch einmal die Darstellung zu genetischer Optimierung an:
50_Simulationstechnik/07_Genalgorithmus
Implementieren Sie folgendes:
- Gene sind Muster mit 32 Bits.
- Die Güte eines Musters ist um so größer, je besser die ersten 16 Bits die zweiten gespiegelt darstellen.
- Implementieren Sie damit ein genetisches Optimierungsverfahren
- Führen Sie auch eine Visualisierung durch, die den Verlauf der Optimierung sichtbar macht, indem immer alle Gene einer Generation zu sehen sind.
|
Spiegel001.zip -- Musterlösung
|