train_class_gmmT_train_class_gmmTrainClassGmmTrainClassGmmtrain_class_gmm (Operator)

Name

train_class_gmmT_train_class_gmmTrainClassGmmTrainClassGmmtrain_class_gmm — Trainieren eines Gaußschen Mischverteilungsmodells.

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)

def train_class_gmm(gmmhandle: HHandle, max_iter: int, threshold: float, class_priors: str, regularize: float) -> Tuple[Sequence[int], Sequence[int]]

Beschreibung

train_class_gmmtrain_class_gmmTrainClassGmmTrainClassGmmtrain_class_gmm trainiert das durch GMMHandleGMMHandleGMMHandleGMMHandlegmmhandle angegebene Gaußsche Mischverteilungsmodell (GMM). Bevor das GMM trainiert werden kann, müssen mit add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmadd_sample_class_gmm, add_samples_image_class_gmmadd_samples_image_class_gmmAddSamplesImageClassGmmAddSamplesImageClassGmmadd_samples_image_class_gmm oder read_samples_class_gmmread_samples_class_gmmReadSamplesClassGmmReadSamplesClassGmmread_samples_class_gmm 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.

MaxIterMaxIterMaxItermaxItermax_iter 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 MaxIterMaxIterMaxItermaxItermax_iter 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 NumCentersNumCentersNumCentersnumCentersnum_centers in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm) 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 Training mit veränderten Parametern (z.B. einem anderen Wert für RandSeedRandSeedRandSeedrandSeedrand_seed in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm) versucht werden.

ClassPriorsClassPriorsClassPriorsclassPriorsclass_priors 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/NumClassesNumClassesNumClassesnumClassesnum_classes 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 RandSeedRandSeedRandSeedrandSeedrand_seed in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm 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 RandSeedRandSeedRandSeedrandSeedrand_seed 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_gmmTrainClassGmmTrainClassGmmtrain_class_gmm 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 NumCentersNumCentersNumCentersnumCentersnum_centers (in create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm) 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_gmmAddSampleClassGmmAddSampleClassGmmadd_sample_class_gmm korrigiert werden. In IterIterIteriteriter wird die Anzahl der durchgeführten Iterationen pro Klasse zurückgeliefert. Sollte ein Wert gleich MaxIterMaxIterMaxItermaxItermax_iter 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, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des GMM.

MaxIterMaxIterMaxItermaxItermax_iter (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale Anzahl von Iterationen des Expectation Maximization Algorithmus

Default: 100

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

ThresholdThresholdThresholdthresholdthreshold (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

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

Default: 0.001

Wertevorschläge: 0.001, 0.0001

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

ClassPriorsClassPriorsClassPriorsclassPriorsclass_priors (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Modus zur Bestimmung der a-priori-Wahrscheinlichkeiten der Klassen

Default: 'training' "training" "training" "training" "training"

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

RegularizeRegularizeRegularizeregularizeregularize (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Regularisierungswert zur Vermeidung der Singularität der Kovarianzmatrizen.

Default: 0.0001

Restriktion: Regularize >= 0.0 && Regularize < 1.0

CentersCentersCenterscenterscenters (output_control)  integer-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der gefundenen Zentren pro Klasse

IterIterIteriteriter (output_control)  integer-array HTupleSequence[int]HTupleHtuple (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_gmmTrainClassGmmTrainClassGmmtrain_class_gmm den Wert 2 ( H_MSG_TRUE) . Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmadd_sample_class_gmm, read_samples_class_gmmread_samples_class_gmmReadSamplesClassGmmReadSamplesClassGmmread_samples_class_gmm

Nachfolger

evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmmevaluate_class_gmm, classify_class_gmmclassify_class_gmmClassifyClassGmmClassifyClassGmmclassify_class_gmm, write_class_gmmwrite_class_gmmWriteClassGmmWriteClassGmmwrite_class_gmm, create_class_lut_gmmcreate_class_lut_gmmCreateClassLutGmmCreateClassLutGmmcreate_class_lut_gmm

Alternativen

read_class_gmmread_class_gmmReadClassGmmReadClassGmmread_class_gmm

Siehe auch

create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm

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