Lade...
 

CX_NEURAL_NETWORK

CX_NEURAL_NETWORK

Klassenhierarchie
Beschreibung:

Diese Klasse ermöglicht den Umgang mit selbst erzeugten neuronalen Netzen.

Die Implementation der neuronalen Netzen basiert auf der OpenNN Library: https://www.opennn.net/

Momentan unterstütze Formen der Datenübergabe zum Trainieren und Testen: CX_EXCEL_XML, ObjectListView, Collection, Vektor.
Innerhalb des übregebenen Datensatzes sind die Typen der folgenden Liste unterstützt:

Unterstützte Datentypen:

Wichtig zu beachten ist die korrekte Formatierung der Spalten der Trainings- und Testdaten. Hierbei muss jede Spalte jeweils genau einem Format entsprechen (jeder Punkt in der obigen Liste der unterstützten Datentypen entspricht einem Format). Bei Spalten aus Werten mit Einheiten müssen die Zellen dieser Spalte alle die selbe Basiseinheit haben. Beim Training wird in diesem Fall anhand der am häufigsten genutzten Einheit der Spalte die Default-Einheit bestimmt, die als Referenz zur Konvertierung aller Zellen der Spalte sowie allen zukünftigen Eingabewerten dieser Spalte dient.

Die momentan unterstützten Netztypen sind Regression und Classification. Netze des Typs Regression eignen sich für Modelle mit numerischem Output (siehe obige Liste der unterstützten Datentypen), wo die Größe der Outputwerte zu den Inputs korreliert (e.g. Preis eines Hauses abhängig von den Eigenschaften des Hauses). Netze des Typs Classification eignen sich für Modelle mit kategorisierendem Output (siehe obige Liste der unterstützten Datentypen), also Outputs in Form von klar unterscheidbaren Klassen (e.g. Art einer Blume abhängig von den Eigenschaften der Blume). Grundsätzlich muss man sich im Klaren sein: die Verwendung von neuronalen Netzen eignet sich generell für Modelle, bei denen die Eingaben nicht orthogonal zueinander sind, also gegenseitig in Korrelation stehen. Zudem müssen (zumindest manche) Eingaben in einer Korrelation mit der/den Ausgabe(n) stehen. Bei Modellen, wo die Eingaben gegenseitig voneinander unabhängig sind, eignet sich ein statistischer Ansatz mehr.

Regression:

RegressionCropped

Ein Netz des Typs Regression besteht aus 5 Layern:

  1. Scaling Layer: normiert die Inputs (mittels f(xi) = xi/σ + μ/σ), μ ist Mittelwert der Inputs, σ ist Standardabweichung der Inputs
  2. Perceptron Layer (tanh): passt Gewichte (w) und Bias (b) an Trainingsdaten an: f(Σixiwi + b), Aktivierungsfunktion f ist tanh (Tangens Hyperbolicus)
  3. Perceptron Layer (linear): passt Gewichte (w) und Bias (b) an Trainingsdaten an: f(Σixiwi + b), Aktivierungsfunktion f ist linear (f(x) = x)
  4. Unscaling Layer: skaliert Werte auf den Definitionsbereich des Outputs (mittels f(xi) = 2xi/(max-min) - (max+min)/(max-min)), max ist maximaler Outputwert, min ist minimaler Outputwert
  5. Bounding Layer: begrenzt Werte auf einen bestimmten Bereich (defaultmäßig die Grenzen eines floats (-3.402823466 * 1038, 3.402823466 * 1038))
Classification:

ClassificationCropped

Ein Netz des Typs Classification besteht aus 4 Layern:

  1. Scaling Layer: normiert die Inputs (mittels f(xi) = xi/σ + μ/σ), μ ist Mittelwert der Inputs, σ ist Standardabweichung der Inputs
  2. Perceptron Layer (tanh): passt Gewichte (w) und Bias (b) an Trainingsdaten an: f(Σixiwi + b), Aktivierungsfunktion f ist tanh (Tangens Hyperbolicus)
  3. Perceptron Layer (tanh)
  4. Probabilistic Layer: bildet Neuronsignalstärken auf Wahrscheinlichkeiten für Outputkategorien ab. Gibt es mehr als zwei Outputkategorien, wird hierzu Softmax genutzt: f(xi) = exijexj. Gibt es genau zwei Outputkategorien, wird hierzu Sigmoid genutzt: f(x) = 1/(1 + e-x)
Excel:
Code-Beispiel:
Var(network) CreateTransObject(CX_NEURAL_NETWORK) -> network // CX_NEURAL_NETWORK erzeugen "regression" network Call(SetType) // Netztyp setzen ............................................... Var(excel) CreateTransObject(CX_EXCEL_XML) -> excel // CX_EXCEL_XML erzeugen "train_and_test_data.xlsx" excel Call(LoadFromFile) ............................................... 1 2 [ 1 2 ] [ 3 4 ] excel network Call(Train) // Netz wird mit Excel-Daten trainiert: Worksheet 1, Zeilen ab Reihe 2 einlesen, Spalte 1 und 2 als Input, Spalte 3 und 4 als Output ............................................... 2 2 [ "col1" "col2" ] [ "col3" "col4" ] // Netz wird mit Excel-Daten getestet: excel network Call(Test) Worksheet 2, Zeilen ab Reihe 2 einlesen, Spalte 1 und 2 als Input, Spalte 3 und 4 als Output ............................................... [ 50$ 2.45 ] network Call(Apply) // Netz ermittelt Output von gegebenem Input
ObjectListView:
Code-Beispiel:
Var(network) CreateTransObject(CX_NEURAL_NETWORK) -> network // CX_NEURAL_NETWORK erzeugen "regression" network Call(SetType) // Netztyp setzen ............................................... // ObjectListView definieren coll FillObox(, listViewObjects) // coll ist bspw. Collection aus CX_PERSON [ Path(CX_PERSON::wages.wagesValue) HEADER T("Einkommen", "Income") ] SetFormat [ Path(CX_PERSON::old.counter) HEADER T("Alter", "Age") ] SetFormat [ Path(CX_PERSON::own.counter) HEADER T("Anzahl Autos", "Number of cars") ] SetFormat ............................................... 2 // Netz wird mit ObjectListView trainiert: [ "Einkommen" "Alter" ] Zeilen ab Reihe 2 einlesen, [ "Anzahl Autos" ] Einkommen und Alter als Input, Widget(, listViewObjects) network Call(Train) Anzahl Autos als Output // Alternativ können Zugriffspfade zur Kennzeichnung von Input und Output genutzt werden: 2 [ Path(CX_PERSON::wages.wagesValue) Path(CX_PERSON::old.counter) ] [ Path(CX_PERSON::own.counter) ] Widget(, listViewObjects) network Call(Train) ............................................... 2 [ 1 2 ] [ 3 ] // Netz wird mit ObjectListView getestet: Widget(, listViewObjects) network Call(Test) Zeilen ab Reihe 2 einlesen, Spalte 1 und 2 als Input, Spalte 3 als Output ............................................... [ 50$ 2.45 ] network Call(Apply) // Netz ermittelt Output von gegebenem Input
Collection:
Code-Beispiel:
Var(network) CreateTransObject(CX_NEURAL_NETWORK) -> network // CX_NEURAL_NETWORK erzeugen "regression" network Call(SetType) // Netztyp setzen ............................................... Var(trainColl, testColl) CreateTransCollection -> trainColl ... // Collection mit Trainingsdaten CreateTransCollection -> testColl ... // Collection mit Testdaten ............................................... [ Path(CX_PERSON::wages.wagesValue) // Netz wird mit Collection trainiert: Path(CX_PERSON::old.counter) ] Pfade zum Einkommen und Alter als Input [ Path(CX_PERSON::own.counter) ] Pfad zur Anzahl an Autos als Output trainColl network Call(Train) ............................................... [ CX_PERSON::wages.wagesValue // Netz wird mit Collection getestet: CX_PERSON::old.counter ] Pfade zum Einkommen und Alter als Input [ CX_PERSON::own.counter ] Pfad zur Anzahl an Autos als Output testColl network Call(Test) ............................................... [ 50€ 39 ] network Call(Apply) // Netz ermittelt Output von gegebenem Input
Vektor:
Code-Beispiel:
Var(network) CreateTransObject(CX_NEURAL_NETWORK) -> network // CX_NEURAL_NETWORK erzeugen "regression" network Call(SetType) // Netztyp setzen ............................................... Var(trainVec, testVec) [ CX_PERSON CX_PERSON ... ] -> trainVec // Vektor aus Objekten [ [ 32€ 46 2 ] [ 14€ 25 0 ] ... ] -> testVec // Vektor aus datenenthaltenden Vektoren ............................................... [ Path(CX_PERSON::wages.wagesValue) // Netz wird mit Vektor aus Objekten trainiert: Path(CX_PERSON::old.counter) ] Pfade zum Einkommen und Alter als Input [ Path(CX_PERSON::own.counter) ] Pfad zur Anzahl an Autos als Output trainVec network Call(Train) ............................................... [ 0 1 ] [ 2 ] testVec network Call(Test) // Netz wird mit Vektor aus Vektoren getestet: Spalte 0 und 1 als Input, Spalte 2 als Output ............................................... [ 50€ 39 ] network Call(Apply) // Netz ermittelt Output von gegebenem Input
 

Anschließend kann das trainierte Netz wie folgt gespeichert und geladen werden:

"model.xml" network Call(SaveToFile) // Volles Netz in XML-Format speichern ............................................... "model.xml" network Call(LoadFromFile) // Volles Netz aus Datei laden
Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
Apply   VECTOR<OBJECT> VECTOR<OBJECT> Rückgabe: Ausgabe des neuronalen Netzes bei vorgegebener Eingabe
GetInputColumnCategories   INTEGER VECTOR<STRING> Rückgabe: Kategorien der gewählten Inputspalte
GetInputColumnNames     VECTOR<ML_STRING> Rückgabe: Namen der Inputspalten
GetOutputColumnCategories   INTEGER VECTOR<STRING> Rückgabe: Kategorien der gewählten Outputspalte
GetOutputColumnNames     VECTOR<ML_STRING> Rückgabe: Namen der Outputspalten
InputColumnParameter * STRING   Schreib-/Lesezugriff auf die Inputspaltenparameter des neuronalen Netzes
InputParameter * STRING   Schreib-/Lesezugriff auf die Inputparameter des neuronalen Netzes
LayerParameter * STRING   Schreib-/Lesezugriff auf die Layerparameter des neuronalen Netzes
LoadFromFile   STRING   Lädt neuronales Netz aus der Datei im gegebenen Pfad
OutputColumnParameter * STRING   Schreib-/Lesezugriff auf die Outputspaltenparameter des neuronalen Netzes
OutputParameter * STRING   Schreib-/Lesezugriff auf die Outputparameter des neuronalen Netzes
OutputTypeParameter * STRING   Schreib-/Lesezugriff auf die Outputtypparameter des neuronalen Netzes
Parameter * STRING   Schreib-/Lesezugriff auf alle Parameter des neuronalen Netzes
SetInputColumnNames   VECTOR<<ML_STRING>   Namen der Inputspalten setzen
SetOutputColumnNames   VECTOR<<ML_STRING>   Namen der Outputspalten setzen
SaveToFile   STRING   Speichert die volle Netzarchitektur in XML-Format im gegebenen Pfad
SeedRand   INTEGER   Startwert für den beim Training verwendeten Zufallszahlengenerator setzen
Test   unterschiedlich (siehe Test) VECTOR<CX_FLOAT> Rückgabe: Genauigkeit (RMSE) des neuronalen Netzes bei vorgegebenen Daten
Train   unterschiedlich (siehe Train)

CX_JSON_OBJECT

VECTOR<INTEGER>

Trainiert das neuronale Netz mittels gelieferten Daten

Rückgabe: Entwicklung des Trainings- und Validierungsfehlers und Zeilenindices der zur Validierung genutzten Daten

* MA = Member-Access-Funktion,
grau unterlegt = geerbte Funktion