train_class_gmmT_train_class_gmmTrainClassGmmTrainClassGmm (Operator)

Name

train_class_gmmT_train_class_gmmTrainClassGmmTrainClassGmm — Trainieren eines Gaussian Mixture Models.

Signatur

train_class_gmm( : : GMMHandle, MaxIter, Threshold, ClassPriors, Regularize : Centers, Iter)

Herror T_train_class_gmm(const Htuple GMMHandle, const Htuple MaxIter, const Htuple Threshold, const Htuple ClassPriors, const Htuple Regularize, Htuple* Centers, Htuple* Iter)

void TrainClassGmm(const HTuple& GMMHandle, const HTuple& MaxIter, const HTuple& Threshold, const HTuple& ClassPriors, const HTuple& Regularize, HTuple* Centers, HTuple* Iter)

HTuple HClassGmm::TrainClassGmm(Hlong MaxIter, double Threshold, const HString& ClassPriors, double Regularize, HTuple* Iter) const

HTuple HClassGmm::TrainClassGmm(Hlong MaxIter, double Threshold, const char* ClassPriors, double Regularize, HTuple* Iter) const

HTuple HClassGmm::TrainClassGmm(Hlong MaxIter, double Threshold, const wchar_t* ClassPriors, double Regularize, HTuple* Iter) const   (Nur Windows)

static void HOperatorSet.TrainClassGmm(HTuple GMMHandle, HTuple maxIter, HTuple threshold, HTuple classPriors, HTuple regularize, out HTuple centers, out HTuple iter)

HTuple HClassGmm.TrainClassGmm(int maxIter, double threshold, string classPriors, double regularize, out HTuple iter)

Beschreibung

train_class_gmmtrain_class_gmmTrainClassGmmTrainClassGmmTrainClassGmm trainiert das durch GMMHandleGMMHandleGMMHandleGMMHandleGMMHandle angegebene Gaussian Mixture Model (GMM). Bevor das GMM trainiert werden kann, müssen mit add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmAddSampleClassGmm, add_samples_image_class_gmmadd_samples_image_class_gmmAddSamplesImageClassGmmAddSamplesImageClassGmmAddSamplesImageClassGmm oder read_samples_class_gmmread_samples_class_gmmReadSamplesClassGmmReadSamplesClassGmmReadSamplesClassGmm alle im Training zu verwendenden Trainingsmuster in dem GMM abgespeichert werden. Es können auch nach dem Training noch neue zusätzliche Trainingsmuster hinzugefügt und trainiert werden.

Beim Training wird der Fehler, den das GMM auf den gespeicherten Trainingsdaten erzielt, durch das expectation maximization (EM) Verfahren minimiert.

MaxIterMaxIterMaxIterMaxItermaxIter spezifiziert die maximale Anzahl von Iterationen pro Klasse für den EM-Algorithmus. In der Praxis sollten Werte zwischen 20 und 200 ausreichend für die meisten Probleme sein. ThresholdThresholdThresholdThresholdthreshold spezifiziert eine Schwelle für die relative Änderung des Fehlers. Sollte bis zum Erreichen von MaxIterMaxIterMaxIterMaxItermaxIter Iterationen die relative Änderung des Fehlers nicht unter ThresholdThresholdThresholdThresholdthreshold liegen, so wird der Algorithmus für diese Klasse abgebrochen. Da der Algorithmus mit der maximal spezifizierten Anzahl Zentren (Parameter NumCentersNumCentersNumCentersNumCentersnumCenters in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmm) begonnen wird ist im Falle des vorzeitigen Abbruchs von einer nicht optimalen Anzahl Zentren und einem nicht optimalen Fehler für diese Klasse auszugehen. In diesem Fall kann ein neues Trainung mit veränderten Parametern (z.B. einem anderen Wert für RandSeedRandSeedRandSeedRandSeedrandSeed in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmm) versucht werden.

ClassPriorsClassPriorsClassPriorsClassPriorsclassPriors bestimmt die Berechnungsweise von a-priori-Wahrscheinlichkeiten der Klassen. Falls 'training'"training""training""training""training" eingegeben ist, wird die Wahrscheinlichkeit einer Klasse von dem Anteil der entsprechenden Trainingsmuster im Vergleich zu der gesamten Anzahl von Mustern berechnet. Falls 'uniform'"uniform""uniform""uniform""uniform" eingegeben ist, werden alle a-priori-Wahrscheinlichkeiten zu 1/NumClasses gesetzt.

RegularizeRegularizeRegularizeRegularizeregularize regularisiert (beinahe) singuläre Kovarianzmatrizen während des Trainings. Singuläre Kovarianzmatrizen treten nur bei ausschließlich linear abhängigen Trainingsvektoren auf. In diesem Fall wird RegularizeRegularizeRegularizeRegularizeregularize wird zur Hauptdiagonale der Matrix addiert, so dass die Matrix nicht singulär wird. Es ist empfehlenswert einen Wert von 1e-4 zu übergeben. Wenn RegularizeRegularizeRegularizeRegularizeregularize auf 0.0 gesetzt wird, wird keine Regularisierung der Matrix durchgeführt.

Die Mittelpunkte der Zentren werden anfangs auf zufällige Werte gesetzt. In Einzelfällen kann es dazu kommen, dass mit den durch RandSeedRandSeedRandSeedRandSeedrandSeed in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmm festgelegten Werten ein relativ hoher Fehler als optimaler Wert bestimmt wird, d.h., dass die Optimierung in einem lokalen Minimum steckenbleibt. Falls vermutet werden kann, dass dies passiert ist, sollte ein neues GMM mit einem anderen Wert für RandSeedRandSeedRandSeedRandSeedrandSeed erzeugt werden, um zu überprüfen, ob ein signifikant kleinerer Fehler erzeugt werden kann.

Es ist zu beachten, dass je nach Anzahl der Zentren, des Typs der Kovarianzmatrizen und der Anzahl der Trainingsmuster das Trainieren zwischen wenigen Sekunden und einigen Stunden dauern kann.

Als Ausgabe liefert train_class_gmmtrain_class_gmmTrainClassGmmTrainClassGmmTrainClassGmm in CentersCentersCentersCenterscenters die Anzahl Zentren pro Klasse zurück, die von dem EM-Algorithmus als am besten geeignet festgestellt wurde. Diese Rückgabe kann als Referenz für zukünftig zu erstellende GMMs in NumCentersNumCentersNumCentersNumCentersnumCenters (in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmm) dienen. Wenn die Anzahl der gefundenen Zentren beim GMM-Training mit Integer-Daten unerwartet hoch ist, kann dass durch Anpassung des RandomizeRandomizeRandomizeRandomizerandomize-Parameters in add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmAddSampleClassGmm korrigiert werden. In IterIterIterIteriter wird die Anzahl der durchgeführten Iterationen pro Klasse zurückgeliefert. Sollte ein Wert gleich MaxIterMaxIterMaxIterMaxItermaxIter sein, so wurde der Algorithmus abgebrochen (s.o.).

Ausführungsinformationen

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.

Parameter

GMMHandleGMMHandleGMMHandleGMMHandleGMMHandle (input_control, Zustand wird modifiziert)  class_gmm HClassGmm, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des GMM.

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

Maximale Anzahl von Iterationen des Expectation Maximization Algorithmus

Defaultwert: 100

Wertevorschläge: 10, 20, 30, 50, 100, 200

ThresholdThresholdThresholdThresholdthreshold (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Schwellwert für die relative Änderung des Fehlers damit der expectation maximization Algorithmus endet.

Defaultwert: 0.001

Wertevorschläge: 0.001, 0.0001

Restriktion: Threshold >= 0.0 && Threshold <= 1.0

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

Modus zur Bestimmung der a-priori-Wahrscheinlichkeiten der Klassen

Defaultwert: 'training' "training" "training" "training" "training"

Werteliste: 'training'"training""training""training""training", 'uniform'"uniform""uniform""uniform""uniform"

RegularizeRegularizeRegularizeRegularizeregularize (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Regularisationswert zur Vermeidung der Singularität der Kovarianzmatrizen.

Defaultwert: 0.0001

Restriktion: Regularize >= 0.0 && Regularize < 1.0

CentersCentersCentersCenterscenters (output_control)  integer-array HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der gefundenen Zentren pro Klasse

IterIterIterIteriter (output_control)  integer-array HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der durchgeführten Iterationen pro Klasse

Beispiel (HDevelop)

create_class_gmm (NumDim, NumClasses, [1,5], 'full', 'none', 0, 42,\
                  GMMHandle)
* Add the training data
read_samples_class_gmm (GMMHandle, 'samples.gsf')
* Train the GMM
train_class_gmm (GMMHandle, 100, 1e-4, 'training', 1e-4, Centers, Iter)
* Write the Gaussian Mixture Model to file
write_class_gmm (GMMHandle, 'gmmclassifier.gmm')

Ergebnis

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

Vorgänger

add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmAddSampleClassGmm, read_samples_class_gmmread_samples_class_gmmReadSamplesClassGmmReadSamplesClassGmmReadSamplesClassGmm

Nachfolger

evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmmEvaluateClassGmm, classify_class_gmmclassify_class_gmmClassifyClassGmmClassifyClassGmmClassifyClassGmm, write_class_gmmwrite_class_gmmWriteClassGmmWriteClassGmmWriteClassGmm, create_class_lut_gmmcreate_class_lut_gmmCreateClassLutGmmCreateClassLutGmmCreateClassLutGmm

Alternativen

read_class_gmmread_class_gmmReadClassGmmReadClassGmmReadClassGmm

Siehe auch

create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmm

Literatur

Christopher M. Bishop: „Neural Networks for Pattern Recognition“; Oxford University Press, Oxford; 1995.
Mario A.T. Figueiredo: „Unsupervised Learning of Finite Mixture Models“; IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 24, No. 3; March 2002.

Modul

Foundation