train_dl_classifier_batchT_train_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatch (Operator)

Name

train_dl_classifier_batchT_train_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatch — Ausführen eines Trainingsschrittes eines Deep Learning-basierten Klassifikators auf Basis eines Batches von Bildern.

Warnung

train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch ist veraltet und wird nur aus Gründen der Rückwärtskompatibilität zur Verfügung gestellt. Neue Applikationen sollten stattdessen den allgemeinen CNN-basierten Operator train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatch verwenden.

Signatur

train_dl_classifier_batch(BatchImages : : DLClassifierHandle, BatchLabels : DLClassifierTrainResultHandle)

Herror T_train_dl_classifier_batch(const Hobject BatchImages, const Htuple DLClassifierHandle, const Htuple BatchLabels, Htuple* DLClassifierTrainResultHandle)

void TrainDlClassifierBatch(const HObject& BatchImages, const HTuple& DLClassifierHandle, const HTuple& BatchLabels, HTuple* DLClassifierTrainResultHandle)

void HDlClassifierTrainResult::HDlClassifierTrainResult(const HImage& BatchImages, const HDlClassifier& DLClassifierHandle, const HTuple& BatchLabels)

void HDlClassifierTrainResult::TrainDlClassifierBatch(const HImage& BatchImages, const HDlClassifier& DLClassifierHandle, const HTuple& BatchLabels)

static void HOperatorSet.TrainDlClassifierBatch(HObject batchImages, HTuple DLClassifierHandle, HTuple batchLabels, out HTuple DLClassifierTrainResultHandle)

public HDlClassifierTrainResult(HImage batchImages, HDlClassifier DLClassifierHandle, HTuple batchLabels)

void HDlClassifierTrainResult.TrainDlClassifierBatch(HImage batchImages, HDlClassifier DLClassifierHandle, HTuple batchLabels)

Beschreibung

train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch führt einen Trainingsschritt für den Deep Learning-basierten Klassifikator in DLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandle aus, welcher zuvor mit read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier eingelesen wurde. Bevor der Trainingsschritt ausgeführt werden kann, müssen die Klassen mittels set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam gesetzt werden. Zudem empfiehlt es sich, für die Optimierung wichtige Hyperparameter wie die Lernrate und das Momentum mit set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam zu setzen. Der Trainingsschritt für das Neuronale Netzwerk basiert auf den Daten eines einzelnen Batches aus dem Trainings-Datensatz, d.h. den Bilder BatchImagesBatchImagesBatchImagesBatchImagesbatchImages und zugehörigen Labels BatchLabelsBatchLabelsBatchLabelsBatchLabelsbatchLabels. Dabei muss die Anzahl der Bilder des Batches einem Vielfachen der 'batch_size'"batch_size""batch_size""batch_size""batch_size" entsprechen, wobei der Parameter 'batch_size'"batch_size""batch_size""batch_size""batch_size" durch die Größe des vorhandenen GPU-Speichers limitiert ist. Um mehr Bilder in einem Trainingsschritt verarbeiten zu können, kann der Parameter 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" auf einen Wert größer 1 gesetzt werden. Die Anzahl an Bildern, die dem Trainings-Operator übergeben werden, beträgt 'batch_size'"batch_size""batch_size""batch_size""batch_size" mal 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier". Dabei sei angemerkt, dass ein Trainingsschritt auf einem Batch mit einem 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" größer 1 eine Approximation eines Trainingsschrittes ist, der auf dem gleichen Batch, aber mit einem 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" von 1 und einer entsprechend größeren 'batch_size'"batch_size""batch_size""batch_size""batch_size" berechnet wurde. Beispielsweise kann man Unterschiede erwarten zwischen Werten, die mit einer 'batch_size'"batch_size""batch_size""batch_size""batch_size" von 4 und 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" von 2 berechnet wurden, und Werten, die mit einer 'batch_size'"batch_size""batch_size""batch_size""batch_size" von 8 und 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" von 1 berechnet wurden, obwohl in beiden Fällen mit der gleichen Anzahl an Bildern gearbeitet wurde. Allerdings liefert diese Approximation im Allgemeinen vergleichbar gute Ergebnisse, so dass sie verwendet werden kann, wenn man mit mehr Bildern trainieren möchte als der Speicher der GPU erlaubt. In seltenen Fällen kann es vorkommen, dass die Approximation mit einer 'batch_size'"batch_size""batch_size""batch_size""batch_size" von 1 und einem entsprechend großen 'batch_size_multiplier'"batch_size_multiplier""batch_size_multiplier""batch_size_multiplier""batch_size_multiplier" nicht die erwartete Performance zeigt, was beispielsweise bei der Verwendung des vortrainierten Netzes 'pretrained_dl_classifier_resnet50.hdl'"pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl""pretrained_dl_classifier_resnet50.hdl" auftreten kann. Das Problem kann in den meisten Fällen gelöst werden, indem die 'batch_size'"batch_size""batch_size""batch_size""batch_size" auf einen Wert größer 1 gesetzt wird.

Man beachte außerdem, dass die Bilder in BatchImagesBatchImagesBatchImagesBatchImagesbatchImages je nach gewähltem Netzwerk gewisse Voraussetzungen an beispielsweise der Bildgröße oder dem Grauwertbereich erfüllen muss. Für detailliertere Informationen siehe read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier und set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam. Die Labels in BatchImagesBatchImagesBatchImagesBatchImagesbatchImages können als Tupel von Klassennamen oder als Tupel von Indizes (von 0 startend) übergeben werden. Dabei geben die Indizes die jeweiligen Positionen der Labels in dem Tupel der Klassen an, welches zuvor mit set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam über 'classes'"classes""classes""classes""classes" gesetzt wurde. Informationen über die Resultate des Trainingsschrittes wie der Wert der Zielfunktion werden in DLClassifierTrainResultHandleDLClassifierTrainResultHandleDLClassifierTrainResultHandleDLClassifierTrainResultHandleDLClassifierTrainResultHandle gespeichert und können mit get_dl_classifier_train_resultget_dl_classifier_train_resultGetDlClassifierTrainResultGetDlClassifierTrainResultGetDlClassifierTrainResult abgefragt werden.

Man beachte, dass eine Epoche in der Regel aus mehreren Batches besteht und für ein erfolgreiches Training das Iterieren über mehrere Epochen notwendig ist. Daher muss der Operator train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch mehrere Male mit unterschiedlichen Batches ausgeführt werden. Für einer detaillierte Erklärung siehe Legacy / DL Klassifikation.

Während des Trainingschrittes wird der Wert der Zielfunktion, der von dem Neuronalen Netzwerk auf Basis der Batch-Daten erreicht wird, mit einem nichtlinearen Optimierungsalgorithmus minimiert. Als Algorithmus wird ein stochastisches Gradientenabstiegsverfahren (SGD) verwendet. Dabei werden im Trainingsschritt die Gewichte des vorhergehenden Trainingsschrittes wie folgt auf aktualisiert:

Bei obiger Formel stehen für die Lernrate, für das Momentum und für das Klassifikationsergebnis des Deep Learning-basierten Klassifikators, welches von den Netzwerk Gewichten und dem Eingabe-Batch abhängt. Die Variable wird verwendet um die Wirkung des Momentums einfließen zu lassen. Als Zielfunktion wird der Multinomial Logistic Loss in Kombination mit einem quadratischen Regularisierungsterm verwendet:

Dabei kodiert der Vektor das Label des -ten Bildes des Batches welches -viele Bilder beinhaltet. Der Term ist als Vektor zu verstehen, der in jedem Eintrag den Logarithmus der Einträge von enthält. Der Regularisierungsterm besteht aus der gewichteten -Norm, die alle Gewichte außer Bias-Terme einbezieht. Der Einfluss der Regularisierung kann über gesteuert werden. In der obigen Formel steht für den Hyperparameter 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior" und kann mit set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam gesetzt werden. Für einen besseren Einblick kann mit dem Operator get_dl_classifier_train_resultget_dl_classifier_train_resultGetDlClassifierTrainResultGetDlClassifierTrainResultGetDlClassifierTrainResult der aktuelle Wert von sowohl der Gesamt-Zielfunktion als auch von einzelnen Termen abgefragt werden.

Das Konzept der Deep Learning-basierten Klassifikation ist in der Einleitung zu Kapitel Deep Learning / Klassifikation beschrieben. Der Ablauf mit diesem veralteten Operator ist im Kapitel Legacy / DL Klassifikation beschrieben.

Achtung

Der Operator train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch basiert auf Algorithmen, die in manchen Fällen nicht deterministisch sind. Daher können Ergebnisse von mehreren Aufrufen von train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch trotz gleicher Eingabewerte leicht voneinander abweichen.

Um diesen Operator ausführen zu können, werden cuDNN und cuBLAS benötigt. Für weitere Details wird auf den „Installation Guide“, Abschnitt „Requirements for Deep Learning“, verwiesen.

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

BatchImagesBatchImagesBatchImagesBatchImagesbatchImages (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (real)

Bilder zusammengefasst in einem Batch.

DLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandleDLClassifierHandle (input_control)  dl_classifier HDlClassifier, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Deep Learning-basierten Klassifikators.

BatchLabelsBatchLabelsBatchLabelsBatchLabelsbatchLabels (input_control)  string-array HTupleHTupleHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong)

Labels der Bilder in dem Batch

Defaultwert: []

Werteliste: []

DLClassifierTrainResultHandleDLClassifierTrainResultHandleDLClassifierTrainResultHandleDLClassifierTrainResultHandleDLClassifierTrainResultHandle (output_control)  dl_classifier_train_result HDlClassifierTrainResult, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle der Trainingsresultate des Deep Learning-basierten Klassifikators.

Ergebnis

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

Vorgänger

read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier, set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam, get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam

Nachfolger

get_dl_classifier_train_resultget_dl_classifier_train_resultGetDlClassifierTrainResultGetDlClassifierTrainResultGetDlClassifierTrainResult, apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier, clear_dl_classifier_train_resultclear_dl_classifier_train_resultClearDlClassifierTrainResultClearDlClassifierTrainResultClearDlClassifierTrainResult, clear_dl_classifierclear_dl_classifierClearDlClassifierClearDlClassifierClearDlClassifier

Alternativen

train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatch, train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlp, train_class_svmtrain_class_svmTrainClassSvmTrainClassSvmTrainClassSvm

Siehe auch

apply_dl_classifierapply_dl_classifierApplyDlClassifierApplyDlClassifierApplyDlClassifier

Modul

Deep Learning Training