R - Einführung in ML mit CNN (1) (Stefan Bosse) [11.2023]

Einführung in Einführung in ML mit CNN (Teil 1)

Einführung in Einführung in ML mit CNN (Teil 1)
Vorwort
Literatur
Synthetische Bilder
Randomisiertes Sampling
Datenteilung: Trainings- und Testdaten
Das CNN Modell
Training des Modells
Statistische Analyse
Aufgabe

Vorwort

Bitte folgenden Code ausführen um notwendige Bibliotheken zu laden. Nicht erforderlich bei nativer R Software.

Der Code in dieser Übung wird in einem eigenen Web Worker Prozess unabhängig von der Frontend Seite ausgeführt. Daher muss der Worker zuerst EINMAL gestartet werden.


R Worker Starten

 ▸ 
[]
 ✗ 
 ≡ 


R Set-up

 ▸ 
[]
 ✗ 
 ≡ 

Es wird in diesem Kurs der R-Dialekt r+ verwendet. R+ ist eine Reimplementierung von R in JavaScript und läuft direkt in Web Browsern und node webkit Applikationsprogrammen. Es ist keine Softwareinstallation erforderlich.

Literatur

Synthetische Bilder

Synthetische Bilder sollten immer statistisch parametrisiert werden, d.h. unter Anwendung von Monte Carlo Simulation und Veränderung von Parametern.

\[ {C}=\frac{{{i}_{{1}}-{i}_{{0}}}}{{{i}_{{1}}+{i}_{{0}}}} \]

Universelle Funktion zum Erzeugen von synthetischen Geometriebildern. Es wird von einer Bildgröße von 32 × 32 Pixel ausgegangen.

 ▸ 
[]
 ✗ 
 ≡ 

Aufgabe. Erzeuge einen Datensatz mit jeweils N Linien, Kreise, und Rechtecken. Nachfolgend ist dieses für Rechtecke gezeigt. Ergänze Kreise (Ellipsen mit w != h) und Linien (w und h geben die rechteckige Rahmenboxgröße an).


Datensatz Synthetische Bilder

 ▸ 
[]
 ✗ 
 ≡ 

Randomisiertes Sampling

Bisher liegen die annotierten Beispielsdaten in einer Datentabelle in geordneter Reihenfolge. Für das Training (Anpassung) (und ggfs. den Test) eines datengetriebenen Modells M(x) ≈ f(x)=xy sind aber randomisiert gereihte Dateninstanzen sinnvoll oder gar erforderlich (hängt vom Anpassungsverfahren ab).

Die Datentabelle mit annotierten (gelabelten) Dateninstanz soll eine randomisierte Reihenfolge der Zeilen erhalten.


Beispiel Randomisiertes Sampling eines Vektors

 ▸ 
[]
 ✗ 
 ≡ 

Aufgabe. Erzeuge einen randomisiert gereihten Datensatz (im.dataset aus im.dataset).


Randomisiert gereihter Datensatz

 ▸ 
[]
 ✗ 
 ≡ 

Datenteilung: Trainings- und Testdaten

Neben der Randomisierung der Reihenfolge von Datensätzen ist eine Partitionierung in Trainings- und Testdaten i.A. erforderlich. Für die Anpassung des Modells werden nur die Trainingsdaten verwendet.

Ein Problem bei einer schrittweisen Anpassung eines Modells and Daten ist die Spezialisierung (Overfitting), d.h., das Modell kann nur bei den Trainingsdaten gute Ergebnisse liefern, nicht aber bei unbekannten (oder Testdaten).

Typischerweise teilt man die gesamte annotierte Datenmenge zu 80/20 % auf, Der Großteil wird für das Training verwendet.

Hat man nur eine kleine Datensatzmenge kann auch 100% für das Training verwendet werden. Dann ist aber keine Prüfung des Modells bezüglich Generalisierung und allgemeingültiger Qualität (Fehler, Akkuratheit, Präzision) möglich.


Trainings- und Testdatenpartitionierung in R+

 ▸ 
[]
 ✗ 
 ≡ 

Das CNN Modell

Ein CNN Modell besteht aus verschiedenen Ebenen:

  1. Convolutional Layer (C): Mathematische kernelbasierte Matrixoperation hier mit mehreren Filtern (Kernels), mit bestimmten Padding und Striding ⇒ n Filter erzeugen aus einem Bild n neue Bidler!
  2. Pooling Layer (P): Auch kerlnelbasierte Matrixoperation, aber nicht paramaterisierbar, d.h., Anwendung einer Funktion wie Maximumsauswahl oder Mittelwertberechnugn auf Filtermaske.
  3. Funktionale Schicht (F): Abbildung von Matrizen durch Pixeloperation (z.B. ReLu Funktion);
  4. Künstliches Neuronales Netzwerk (Fully Connected FCANN)

C und P treten i.A. paarweise auf (CP Paare) und wirken hier häufig dimensions- und größenreduzierend. Das ist nicht verwunderlich da am Ende nur eine geringe Dimensionalität (hier Vektor mit drei Werten) berechnet werden soll.

Es wird mit der ´cnn::cnn´ Funktion erzeugt. Es können die Schichten (Layer), also die Modellstruktur und Architektur, und der Trainingsalgorithmus bestimmt und parametrisiert werden. Standardmäßig wird ein Stochastic Gradient Descent Trainer (SGD) verwendet.

Aufgabe. Berechne für die verwendeten Netzwerke die Gesamtzahl dynamischer Parameter aus den einzelnen Schichten.


Das CNN Modell erstellen

 ▸ 
[]
 ✗ 
 ≡ 

Training des Modells

Das Training erfolgt mit cnn::train Funktion. Es wird benötigt:

Aufgabe. Führe ein Training exemplarisch mit einem kleinen Netzwerk und N=100 durch (epochs=30) und notiere exemplarisch die Entwicklung des Loss- und kategorischen Fehlerwerts. Wie entwickelt sich das Training mit zunehmenden Epochen?


Das CNN Modell trainieren

 ▸ 
[]
 ✗ 
 ≡ 


Trainingsverlauf plotten

 ▸ 
[]
 ✗ 
 ≡ 

Statistische Analyse

Der Loss oder Fehlerwert vom Training ist nur begrenzt aussagekräftig (und ist dynamisiert) wenn es um die Frage der Qualität des Modells und dessen Allgemeingültigkeit geht (Generalisierung). Dazu müssen die Trainings- und vor allem Testdaten nochmals vom Modell berechnet werden.

Was wird benötigt?

  1. Der mittlere Klassifikationsfehler des Modells für:
  2. Der klassenspezifische Fehler, also die Konfusionsmatrix für:
  3. Accuracy, Precision, Recall, F1-Score

Die Berechnung des Modells mit Eingabedaten erfolgt mit cnn::predict(model,x). Man bekommt eine Liste mit {score:numeric,value:label} oder eine Datentabelle mit entsprechenden Spalten. Der Score ist der numerische Ausgabewert der Softmax oder Neuronenschicht, der Wert ist die kategorische Klasse als "best winner".


Statistische Analyse des Modells (und der Daten)

 ▸ 
[]
 ✗ 
 ≡ 

Frage. Was stellt man schon bei den ersten Versuchen fest (Ergebnisse für Trainings- versa Testdaten)?

Aufgabe

  1. Wiederhole die Experimente für N=100 mit verschiedenen Modellarchitekturen:

  2. Notiere die Ergebnisse. Wo gibt es Falschklassifikationen?

  3. Wiederhole das Experiment mit N=500,1000. Gibt es eine Verbesserung?

  4. Hat die Anzahl der Epochen einen Einfluss auf die Qualität des Modells (je mehr desto besser?). Es geht vor allem um die Ergebnisse mit den Testdaten.


Hilfe



Einreichung (Assignment #01-46158 )



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.25.0 (c) Dr. Stefan Bosse (Tue Dec 19 2023 08:50:39 GMT+0100 (Central European Standard Time))