KlassenKlassenKlassenKlassen | | | | Operatoren

train_class_gmmT_train_class_gmmTrainClassGmmtrain_class_gmmTrainClassGmmTrainClassGmm (Operator)

Name

train_class_gmmT_train_class_gmmTrainClassGmmtrain_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)

Herror train_class_gmm(const HTuple& GMMHandle, const HTuple& MaxIter, const HTuple& Threshold, const HTuple& ClassPriors, const HTuple& Regularize, HTuple* Centers, HTuple* Iter)

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

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

void HOperatorSetX.TrainClassGmm(
[in] VARIANT GMMHandle, [in] VARIANT MaxIter, [in] VARIANT Threshold, [in] VARIANT ClassPriors, [in] VARIANT Regularize, [out] VARIANT* Centers, [out] VARIANT* Iter)

VARIANT HClassGmmX.TrainClassGmm(
[in] Hlong MaxIter, [in] double Threshold, [in] BSTR ClassPriors, [in] double Regularize, [out] VARIANT* Iter)

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_gmmTrainClassGmmtrain_class_gmmTrainClassGmmTrainClassGmm trainiert das durch GMMHandleGMMHandleGMMHandleGMMHandleGMMHandleGMMHandle angegebene Gaussian Mixture Model (GMM). Bevor das GMM trainiert werden kann, müssen mit add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmm, add_samples_image_class_gmmadd_samples_image_class_gmmAddSamplesImageClassGmmadd_samples_image_class_gmmAddSamplesImageClassGmmAddSamplesImageClassGmm oder read_samples_class_gmmread_samples_class_gmmReadSamplesClassGmmread_samples_class_gmmReadSamplesClassGmmReadSamplesClassGmm 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.

MaxIterMaxIterMaxIterMaxIterMaxItermaxIter 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. ThresholdThresholdThresholdThresholdThresholdthreshold spezifiziert eine Schwelle für die relative Änderung des Fehlers. Sollte bis zum Erreichen von MaxIterMaxIterMaxIterMaxIterMaxItermaxIter Iterationen die relative Änderung des Fehlers nicht unter ThresholdThresholdThresholdThresholdThresholdthreshold liegen, so wird der Algorithmus für diese Klasse abgebrochen. Da der Algorithmus mit der maximal spezifizierten Anzahl Zentren (Parameter NumCentersNumCentersNumCentersNumCentersNumCentersnumCenters in create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm) 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 RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed in create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm) versucht werden.

ClassPriorsClassPriorsClassPriorsClassPriorsClassPriorsclassPriors bestimmt die Berechnungsweise von a-priori-Wahrscheinlichkeiten der Klassen. Falls 'training'"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""uniform" eingegeben ist, werden alle a-priori-Wahrscheinlichkeiten zu 1/NumClasses gesetzt.

RegularizeRegularizeRegularizeRegularizeRegularizeregularize 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 RegularizeRegularizeRegularizeRegularizeRegularizeregularize 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 RegularizeRegularizeRegularizeRegularizeRegularizeregularize 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 RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed in create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm 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 RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed 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_gmmTrainClassGmmtrain_class_gmmTrainClassGmmTrainClassGmm in CentersCentersCentersCentersCenterscenters 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 NumCentersNumCentersNumCentersNumCentersNumCentersnumCenters (in create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm) dienen. Wenn die Anzahl der gefundenen Zentren beim GMM-Training mit Integer-Daten unerwartet hoch ist, kann dass durch Anpassung des RandomizeRandomizeRandomizeRandomizeRandomizerandomize-Parameters in add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmm korrigiert werden. In IterIterIterIterIteriter wird die Anzahl der durchgeführten Iterationen pro Klasse zurückgeliefert. Sollte ein Wert gleich MaxIterMaxIterMaxIterMaxIterMaxItermaxIter sein, so wurde der Algorithmus abgebrochen (s.o.).

Parallelisierung

Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:

Der Wert dieses Parameters darf nicht über mehrere Threads verwendet werden.

Parameter

GMMHandleGMMHandleGMMHandleGMMHandleGMMHandleGMMHandle (input_control, Zustand wird modifiziert)  class_gmm HClassGmm, HTupleHTupleHClassGmm, HTupleHClassGmmX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle des GMM.

MaxIterMaxIterMaxIterMaxIterMaxItermaxIter (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Maximale Anzahl von Iterationen des Expectation Maximization Algorithmus

Defaultwert: 100

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

ThresholdThresholdThresholdThresholdThresholdthreshold (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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

ClassPriorsClassPriorsClassPriorsClassPriorsClassPriorsclassPriors (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Modus zur Bestimmung der a-priori-Wahrscheinlichkeiten der Klassen

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

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

RegularizeRegularizeRegularizeRegularizeRegularizeregularize (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Regularisationswert zur Vermeidung der Singularität der Kovarianzmatrizen.

Defaultwert: 0.0001

Restriktion: Regularize >= 0.0 && Regularize < 1.0

CentersCentersCentersCentersCenterscenters (output_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Anzahl der gefundenen Zentren pro Klasse

IterIterIterIterIteriter (output_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (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')
clear_class_gmm (GMMHandle)

Ergebnis

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

Vorgänger

add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmm, read_samples_class_gmmread_samples_class_gmmReadSamplesClassGmmread_samples_class_gmmReadSamplesClassGmmReadSamplesClassGmm

Nachfolger

evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmm, classify_class_gmmclassify_class_gmmClassifyClassGmmclassify_class_gmmClassifyClassGmmClassifyClassGmm, write_class_gmmwrite_class_gmmWriteClassGmmwrite_class_gmmWriteClassGmmWriteClassGmm, create_class_lut_gmmcreate_class_lut_gmmCreateClassLutGmmcreate_class_lut_gmmCreateClassLutGmmCreateClassLutGmm

Alternativen

read_class_gmmread_class_gmmReadClassGmmread_class_gmmReadClassGmmReadClassGmm

Siehe auch

create_class_gmmcreate_class_gmmCreateClassGmmcreate_class_gmmCreateClassGmmCreateClassGmm

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


KlassenKlassenKlassenKlassen | | | | Operatoren