create_class_mlpT_create_class_mlpCreateClassMlpCreateClassMlp (Operator)

Name

create_class_mlpT_create_class_mlpCreateClassMlpCreateClassMlp — Erzeugen eines mehrschichtigen Perzeptrons zur Klassifikation oder Regression.

Signatur

create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunction, Preprocessing, NumComponents, RandSeed : MLPHandle)

Herror T_create_class_mlp(const Htuple NumInput, const Htuple NumHidden, const Htuple NumOutput, const Htuple OutputFunction, const Htuple Preprocessing, const Htuple NumComponents, const Htuple RandSeed, Htuple* MLPHandle)

void CreateClassMlp(const HTuple& NumInput, const HTuple& NumHidden, const HTuple& NumOutput, const HTuple& OutputFunction, const HTuple& Preprocessing, const HTuple& NumComponents, const HTuple& RandSeed, HTuple* MLPHandle)

void HClassMlp::HClassMlp(Hlong NumInput, Hlong NumHidden, Hlong NumOutput, const HString& OutputFunction, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassMlp::HClassMlp(Hlong NumInput, Hlong NumHidden, Hlong NumOutput, const char* OutputFunction, const char* Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassMlp::HClassMlp(Hlong NumInput, Hlong NumHidden, Hlong NumOutput, const wchar_t* OutputFunction, const wchar_t* Preprocessing, Hlong NumComponents, Hlong RandSeed)   (Nur Windows)

void HClassMlp::CreateClassMlp(Hlong NumInput, Hlong NumHidden, Hlong NumOutput, const HString& OutputFunction, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassMlp::CreateClassMlp(Hlong NumInput, Hlong NumHidden, Hlong NumOutput, const char* OutputFunction, const char* Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassMlp::CreateClassMlp(Hlong NumInput, Hlong NumHidden, Hlong NumOutput, const wchar_t* OutputFunction, const wchar_t* Preprocessing, Hlong NumComponents, Hlong RandSeed)   (Nur Windows)

static void HOperatorSet.CreateClassMlp(HTuple numInput, HTuple numHidden, HTuple numOutput, HTuple outputFunction, HTuple preprocessing, HTuple numComponents, HTuple randSeed, out HTuple MLPHandle)

public HClassMlp(int numInput, int numHidden, int numOutput, string outputFunction, string preprocessing, int numComponents, int randSeed)

void HClassMlp.CreateClassMlp(int numInput, int numHidden, int numOutput, string outputFunction, string preprocessing, int numComponents, int randSeed)

Beschreibung

create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp erzeugt ein neuronales Netz in Form eines mehrschichtigen Perzeptrons (engl.: multilayer perceptron, MLP), welches zur Klassifikation oder Regression (Funktionsapproximation) verwendet werden kann, je nachdem, wie OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction gesetzt wird. Das MLP besitzt drei Schichten: eine Eingabeschicht mit NumInputNumInputNumInputNumInputnumInput Eingabevariablen (Einheiten, Neuronen), eine versteckte Schicht mit NumHiddenNumHiddenNumHiddenNumHiddennumHidden Einheiten und eine Ausgabeschicht mit NumOutputNumOutputNumOutputNumOutputnumOutput Ausgabevariablen. Das MLP führt mit den Eingabedaten , dem so genannten Merkmalsvektor, folgende Berechnungsschritte aus, um die Aktivierungen der versteckten Schicht zu berechnen: Die Matrix und der Vektor sind dabei die Gewichte der Eingabeschicht (ersten Schicht) des MLP. Die Aktivierungen der ersten Schicht werden in der versteckten Schicht (zweiten Schicht) zunächst genauso durch Linearkombinationen transformiert, wie in der ersten Schicht: Dabei sind die Matrix und der Vektor die Gewichte der zweiten Schicht des MLP.

Durch Setzen von OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction kann die Aktivierungsfunktion der Ausgabeschicht festgelegt werden. Für OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction = 'linear'"linear""linear""linear""linear" werden die Daten einfach kopiert: Diese Art der Aktivierungsfunktion sollte bei Regressionsaufgaben (Funktionsapproximation) verwendet werden. Diese Aktivierungsfunktion eignet sich nicht für Klassifikationsaufgaben.

Für OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction = 'logistic'"logistic""logistic""logistic""logistic" werden die Aktivierungen wie folgt berechnet: Diese Art der Aktivierungsfunktion sollte bei Klassifikationsaufgaben verwendet werden, bei denen mehrere (NumOutputNumOutputNumOutputNumOutputnumOutput) unabhängige logische Attribute als Ausgabe auftreten können. Dies kommt nur bei sehr wenigen Klassifikationsaufgaben vor.

Für OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction = 'softmax'"softmax""softmax""softmax""softmax" werden die Aktivierungen wie folgt berechnet: Diese Art der Aktivierungsfunktion sollte bei üblichen Klassifikationsaufgaben verwendet werden, bei denen mehrere (NumOutputNumOutputNumOutputNumOutputnumOutput), sich gegenseitig ausschließende Klassen auftreten. Insbesondere muss OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction = 'softmax'"softmax""softmax""softmax""softmax" bei der Klassifikation von Pixeldaten mit classify_image_class_mlpclassify_image_class_mlpClassifyImageClassMlpClassifyImageClassMlpClassifyImageClassMlp verwendet werden.

Mit den Parametern PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing und NumComponentsNumComponentsNumComponentsNumComponentsnumComponents kann eine Vorverarbeitung der Merkmalsvektoren festgelegt werden. Für PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'none'"none""none""none""none" werden die Merkmalsvektoren ohne Änderung an das MLP übergeben. NumComponentsNumComponentsNumComponentsNumComponentsnumComponents wird hier ignoriert.

Für alle anderen Werte von PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing wird aus dem Trainingsdatensatz eine Transformation der Merkmale berechnet, die sowohl beim Training als auch bei der späteren Klassifikation oder Auswertung dazu verwendet wird, die Merkmalsvektoren zu transformieren.

Für PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'normalization'"normalization""normalization""normalization""normalization" werden die Merkmalsvektoren normalisiert, indem der Mittelwert der Trainingsvektoren von den Merkmalsvektoren abgezogen wird und die dadurch entstehenden Merkmalsvektoren durch die Standardabweichung der jeweiligen Komponente der Trainingsvektoren geteilt wird. Die transformierten Merkmalsvektoren haben also einen Mittelwert von 0 und eine Standardabweichung von 1 in jeder Komponente. Die Normalisierung ändert die Länge des Merkmalsvektors nicht. NumComponentsNumComponentsNumComponentsNumComponentsnumComponents wird hier ignoriert. Diese Transformation empfiehlt sich bei allen Daten, in denen die Mittelwerte und Standardabweichungen der Merkmalsvektoren sich stark von 0 bzw. 1 unterscheiden oder bei denen die Komponenten der Daten nicht in denselben Einheiten gemessen werden (z.B., falls einige der Daten Grauwertmerkmale und andere Regionenmerkmale sind, oder falls z.B. Regionenmerkmale wie 'circularity' (Einheit: Skalar) und 'area' (Einheit: Quadratpixel) gemischt werden). In diesem Fall benötigt das Trainieren des MLP typischerweise weniger Iterationen als ohne Normalisierung.

Für PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'principal_components'"principal_components""principal_components""principal_components""principal_components" werden die Merkmalsvektoren einer Hauptachsentransformation (principal component analysis) unterzogen. Die Hauptachsentransformation normalisiert zunächst die Merkmalsvektoren (s.o.). Danach wird eine orthogonale Transformation (eine Rotation im Merkmalsraum) berechnet, die die Trainingsvektoren dekorreliert. Nach der Transformation ist der Mittelwert der Trainingsvektoren 0 und die Kovarianzmatrix der Trainingsvektoren ist eine Diagonalmatrix. Die Transformation wird so bestimmt, dass die transformierten Merkmale, die die größte Variationsbreite aufweisen, als erstes in dem transformierten Merkmalsvektor stehen. Dadurch kann erreicht werden, dass die letzten Komponenten des Merkmalsvektors, die typischerweise stark vom Rauschen beeinflusst werden, ohne großen Informationsverlust weggelassen werden können. Mit NumComponentsNumComponentsNumComponentsNumComponentsnumComponents wird festgelegt, wie viele der transformierten Komponenten verwendet werden sollen. Es können bis zu NumInputNumInputNumInputNumInputnumInput Komponenten selektiert werden. Mit Hilfe von get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlpGetPrepInfoClassMlp kann der Informationsgehalt der einzelnen transformierten Komponenten bestimmt werden, und somit NumComponentsNumComponentsNumComponentsNumComponentsnumComponents einfacher bestimmt werden. Wie die Normalisierung empfiehlt sich diese Transformation, wenn die Merkmalsvektoren Mittelwerte und Standardabweichungen haben, die sich stark von 0 bzw. 1 unterscheiden oder bei denen die Komponenten der Merkmalsvektoren nicht in denselben Einheiten gemessen werden, und wenn zusätzlich zu erwarten ist, dass die Merkmale stark korreliert sind.

Im Gegensatz zu den obigen drei Transformationen, welche für beliebige Typen des MLP verwendet werden können, kann die durch PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates" (kanonische Merkmale) spezifizierte Transformation nur verwendet werden, falls das MLP als Klassifikator mit OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction = 'softmax'"softmax""softmax""softmax""softmax" verwendet wird. In diesem Fall wird eine Transformation bestimmt, die die Trainingsvektoren zuerst normalisiert und dann im Mittel über alle Klassen dekorreliert. Gleichzeitig werden in den transformierten Trainingsvektoren die Mittelwerte der einzelnen Klassen möglichst weit separiert. Wie bei PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'principal_components'"principal_components""principal_components""principal_components""principal_components" werden die transformierten Komponenten nach Informationsgehalt sortiert, so dass transformierte Merkmale mit wenig Informationsgehalt weggelassen werden können. Bei kanonischen Merkmalen können höchstens min(NumOutputNumOutputNumOutputNumOutputnumOutput - 1, NumInputNumInputNumInputNumInputnumInput) Merkmale selektiert werden. Auch hier kann mit get_prep_info_class_mlpget_prep_info_class_mlpGetPrepInfoClassMlpGetPrepInfoClassMlpGetPrepInfoClassMlp der Informationsgehalt der einzelnen transformierten Komponenten bestimmt werden. Wie die Hauptachsentransformation können die kanonischen Merkmale dazu verwendet werden, die Datenmenge ohne großen Informationsverlust zu verringern, wobei zusätzlich noch die Trennbarkeit der Daten nach der Datenreduktion optimiert wird.

Für die letzten zwei Transformationsarten ('principal_components'"principal_components""principal_components""principal_components""principal_components" und 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates") bestimmt NumComponentsNumComponentsNumComponentsNumComponentsnumComponents die Anzahl der Einheiten in der Eingabeschicht, während NumInputNumInputNumInputNumInputnumInput die Dimensionalität der Eingabedaten (Länge des untransformierten Merkmalsvektors) bestimmt. Dadurch wird die Anzahl der Eingabevariablen des MLP geringer, und daher kann typischerweise auch die Anzahl der versteckten Einheiten des MLP geringer gewählt werden, wodurch sich normalerweise die Trainingszeit und die Evaluierungs- und Klassifikationszeit verringert.

Normalerweise sollte NumHiddenNumHiddenNumHiddenNumHiddennumHidden in der Größenordnung von NumInputNumInputNumInputNumInputnumInput und NumOutputNumOutputNumOutputNumOutputnumOutput gewählt werden. In vielen Fällen führen auch viel kleinere Werte von NumHiddenNumHiddenNumHiddenNumHiddennumHidden schon zu sehr guten Klassifikationsergebnissen. Wenn NumHiddenNumHiddenNumHiddenNumHiddennumHidden zu groß gewählt wird, besteht die Gefahr, dass das MLP sich an die Trainingsdaten überanpasst, was zu schlechten Generalisierungseigenschaften führt, d.h. das MLP lernt die Trainingsdaten sehr gut, liefert aber auf unbekannten Daten keine besonders guten Ergebnisse.

create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp initialisiert die oben beschriebenen Gewichte mit Zufallszahlen. Damit die Ergebnisse des Trainierens des MLP mit train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp reproduzierbar werden, wird in RandSeedRandSeedRandSeedRandSeedrandSeed der Initialisierungswert des Zufallszahlengenerators angegeben. Falls das Training einen relativ hohen Fehler zurückliefert, kann eventuell durch eine andere Wahl von RandSeedRandSeedRandSeedRandSeedrandSeed und durch erneutes Trainieren ein kleinerer Trainingsfehler erreicht werden.

Nachdem das MLP erzeugt wurde, werden typischerweise mit add_sample_class_mlpadd_sample_class_mlpAddSampleClassMlpAddSampleClassMlpAddSampleClassMlp oder read_samples_class_mlpread_samples_class_mlpReadSamplesClassMlpReadSamplesClassMlpReadSamplesClassMlp Trainingsdaten zum Netz hinzugefügt und das MLP mit train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp trainiert. Daraufhin kann das MLP mit write_class_mlpwrite_class_mlpWriteClassMlpWriteClassMlpWriteClassMlp abgespeichert werden. Alternativ können auch sofort nach dem Training Daten mit evaluate_class_mlpevaluate_class_mlpEvaluateClassMlpEvaluateClassMlpEvaluateClassMlp bewertet werden oder (für OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction = 'softmax'"softmax""softmax""softmax""softmax") mit classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlp klassifiziert werden.

Das Training des MLPs führt im Normalfall zu relativ scharfen Grenzen zwischen den unterschiedlichen Klassen, d.h. die Konfidenz für eine Klasse fällt von nahe 1 (innerhalb der Region einer Klasse) auf nahe 0 (innerhalb der Region einer anderen Klasse) innerhalb eines schmalen „Bandes“ im Merkmalsraum. Falls die Klassen sich nicht überlappen, erfolgt dieser Übergang an einem geeigneten Ort zwischen den Klassen; falls sich die Klassen überlappen, erfolgt dieser Übergang an einem geeigneten Ort im Überlappungsbereich der Klassen. Dieser scharfe Übergang ist in vielen Anwendungen erwünscht. In einigen Anwendungen ist hingegen ein glatterer Übergang zwischen verschiedenen Klassen wünschenswert (d.h. ein Übergang in einem breiteren „Band“ im Merkmalsraum), um ein gewisses Niveau an Unsicherheit in der Region zwischen den Klassen auszudrücken. Weiterhin kann es, wie oben beschrieben, wünschenswert sein, eine Überanpassung des MLPs an die Trainingsdaten zu verhindern. Zu diesem Zweck kann das MLP mit set_regularization_params_class_mlpset_regularization_params_class_mlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlp regularisiert werden.

Ein wie oben definiertes MLP besitzt keine inhärente Fähigkeit zur Neuheitserkennung, d.h. es klassifiziert zufällige Merkmalsvektoren in eine der Klassen mit einer Konfidenz nahe 1 (außer der zufällige Merkmalsvektor liegt zufälligerweise ein einer Region des Merkmalsraums, in dem sich die Trainingsdaten von zwei Klassen überlappen). In einigen Anwendungen ist es jedoch wünschenswert, Merkmalsvektoren zurückzuweisen, die nicht nahe an irgendeiner Klasse liegen, wobei „Nähe“ über die Distanz des Merkmalsvektors zu der Menge der Merkmalsvektoren in den Trainingsdaten definiert ist. Um das MLP mit der Fähigkeit zur Neuheitserkennung auszustatten, d.h. um Merkmalsvektoren zurückweisen zu können, die zu keiner Klasse gehören, kann eine explizite Rückweisungsklasse erzeugt werden, indem NumOutputNumOutputNumOutputNumOutputnumOutput auf die Anzahl der tatsächlichen Klassen plus 1 gesetzt wird. Danach kann set_rejection_params_class_mlpset_rejection_params_class_mlpSetRejectionParamsClassMlpSetRejectionParamsClassMlpSetRejectionParamsClassMlp verwendet werden, um train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp so zu konfigurieren, dass automatisch Trainingsdaten für diese Rüchweisungsklasse erzeugt werden.

Die Kombination der Regularisierung mit der automatischen Erzeugung einer Rückweisungsklasse ist in vielen Anwendungen nützlich, da sie einen glatten Übergang zwischen den tatsächlichen Klassen sowie von den tatsächlichen Klassen zur Rückweisungsklasse erzeugt. Dies spiegelt die Anforderungen dieser Anwendungen wieder, dass nur Merkmalsvektoren innerhalb des Bereichs des Merkmalsraums, der den Trainingsdaten entspricht, eine Konfidenz nahe 1 erhalten sollen, während zufällige Merkmalsvektoren, die zu keiner Klasse gehören, eine Konfidenz nahe 0 erhalten sollen, und dass Übergänge zwischen den Klassen glatt sein sollen, was eine zunehmende Unsicherheit wiederspiegelt, je weiter ein Merkmalsverktor von der jeweiligen Klasse entfernt liegt. Insbesondere haben OCR-Anwendungen manchmal diese Anforderung (siehe create_ocr_class_mlpcreate_ocr_class_mlpCreateOcrClassMlpCreateOcrClassMlpCreateOcrClassMlp).

Ein Vergleich zwischen MLP und Support-Vektor-Maschinen (SVM) (siehe create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm) zeigt typischerweise, dass SVMs generell schneller traniert werden, insbesondere bei großen Trainingsdatensätzen, und eine leicht verbesserte Erkennungsrate haben. Das MLP weist schnellere Klassifikationszeiten auf und sollte daher in zeitkritischen Anwendungen verwendet werden. Es ist zu beachten, dass der Vergleich von optimal abgestimmten Parametern ausgeht.

Ausführungsinformationen

Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.

Parameter

NumInputNumInputNumInputNumInputnumInput (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der Eingabevariablen (Merkmale) des MLP.

Defaultwert: 20

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100

Restriktion: NumInput >= 1

NumHiddenNumHiddenNumHiddenNumHiddennumHidden (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der versteckten Einheiten des MLP.

Defaultwert: 10

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 150

Restriktion: NumHidden >= 1

NumOutputNumOutputNumOutputNumOutputnumOutput (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der Ausgabevariablen (Klassen) des MLP.

Defaultwert: 5

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 150

Restriktion: NumOutput >= 1

OutputFunctionOutputFunctionOutputFunctionOutputFunctionoutputFunction (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Art der Aktivierungsfunktion in der Ausgabeschicht des MLP.

Defaultwert: 'softmax' "softmax" "softmax" "softmax" "softmax"

Werteliste: 'linear'"linear""linear""linear""linear", 'logistic'"logistic""logistic""logistic""logistic", 'softmax'"softmax""softmax""softmax""softmax"

PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Art der Vorverarbeitung (Transformation) der Merkmalsvektoren.

Defaultwert: 'normalization' "normalization" "normalization" "normalization" "normalization"

Werteliste: 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates", 'none'"none""none""none""none", 'normalization'"normalization""normalization""normalization""normalization", 'principal_components'"principal_components""principal_components""principal_components""principal_components"

NumComponentsNumComponentsNumComponentsNumComponentsnumComponents (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Parameter der Vorverarbeitung: Anzahl der transformierten Merkmale (ignoriert bei PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'none'"none""none""none""none" und PreprocessingPreprocessingPreprocessingPreprocessingpreprocessing = 'normalization'"normalization""normalization""normalization""normalization").

Defaultwert: 10

Wertevorschläge: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100

Restriktion: NumComponents >= 1

RandSeedRandSeedRandSeedRandSeedrandSeed (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Initialisierungswert des Zufallszahlengenerators, der zur Initialisierung des MLP mit zufälligen Werten verwendet wird.

Defaultwert: 42

MLPHandleMLPHandleMLPHandleMLPHandleMLPHandle (output_control)  class_mlp HClassMlp, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des MLP.

Beispiel (HDevelop)

* Use the MLP for regression (function approximation)
create_class_mlp (1, NumHidden, 1, 'linear', 'none', 1, 42, MLPHandle)
* Generate the training data
* D = [...]
* T = [...]
* Add the training data
for J := 0 to NumData-1 by 1
    add_sample_class_mlp (MLPHandle, D[J], T[J])
endfor
* Train the MLP
train_class_mlp (MLPHandle, 200, 0.001, 0.001, Error, ErrorLog)
* Generate test data
* X = [...]
* Compute the output of the MLP on the test data
for J := 0 to N-1 by 1
    evaluate_class_mlp (MLPHandle, X[J], Y)
endfor

* Use the MLP for classification
create_class_mlp (NumIn, NumHidden, NumOut, 'softmax', \
                  'normalization', NumIn, 42, MLPHandle)
* Generate and add the training data
for J := 0 to NumData-1 by 1
    * Generate training features and classes
    * Data = [...]
    * Class = [...]
    add_sample_class_mlp (MLPHandle, Data, Class)
endfor
* Train the MLP
train_class_mlp (MLPHandle, 100, 1, 0.01, Error, ErrorLog)
* Use the MLP to classify unknown data
for J := 0 to N-1 by 1
    * Extract features
    * Features = [...]
    classify_class_mlp (MLPHandle, Features, 1, Class, Confidence)
endfor

Ergebnis

Sind die Parameterwerte korrekt, dann liefert create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlp den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

add_sample_class_mlpadd_sample_class_mlpAddSampleClassMlpAddSampleClassMlpAddSampleClassMlp, set_regularization_params_class_mlpset_regularization_params_class_mlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlpSetRegularizationParamsClassMlp, set_rejection_params_class_mlpset_rejection_params_class_mlpSetRejectionParamsClassMlpSetRejectionParamsClassMlpSetRejectionParamsClassMlp

Alternativen

read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier, create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvm, create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmm

Siehe auch

clear_class_mlpclear_class_mlpClearClassMlpClearClassMlpClearClassMlp, train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp, classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlp, evaluate_class_mlpevaluate_class_mlpEvaluateClassMlpEvaluateClassMlpEvaluateClassMlp

Literatur

Christopher M. Bishop: „Neural Networks for Pattern Recognition“; Oxford University Press, Oxford; 1995.
Andrew Webb: „Statistical Pattern Recognition“; Arnold, London; 1999.

Modul

Foundation