train_dl_model_batchT_train_dl_model_batchTrainDlModelBatchTrainDlModelBatch (Operator)

Name

train_dl_model_batchT_train_dl_model_batchTrainDlModelBatchTrainDlModelBatch — Trainieren eines Deep Learning-Modells.

Signatur

train_dl_model_batch( : : DLModelHandle, DLSampleBatch : DLTrainResult)

Herror T_train_dl_model_batch(const Htuple DLModelHandle, const Htuple DLSampleBatch, Htuple* DLTrainResult)

void TrainDlModelBatch(const HTuple& DLModelHandle, const HTuple& DLSampleBatch, HTuple* DLTrainResult)

HDict HDlModel::TrainDlModelBatch(const HDict& DLSampleBatch) const

static void HOperatorSet.TrainDlModelBatch(HTuple DLModelHandle, HTuple DLSampleBatch, out HTuple DLTrainResult)

HDict HDlModel.TrainDlModelBatch(HDict DLSampleBatch)

Beschreibung

Der Operator train_dl_model_batchtrain_dl_model_batchTrainDlModelBatchTrainDlModelBatchTrainDlModelBatch führt einen Trainingsschritt des in DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle enthaltenen Deep Learning-Modells aus. Die aktuellen Zielfuntions-Werte werden im Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult zurückgegeben.

Ein Trainingsschritt bedeutet hier das einmalige Aktualisieren der Gewichte, basierend auf dem Batch mit Bildern, der in DLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatch gegeben ist. Der Optimierungsalgorithmus, der dazu genutzt wird, ist im Abschnitt „Weitere Informationen zu den Algorithmen“ weiter unten genauer erklärt. Für weitere Informationen zum Trainieren eines Netzwerks, siehe Unterkapitel „Das Netzwerk und der Trainingsprozess“ im Kapitel Deep Learning.

Um ein Modell erfolgreich zu trainieren, müssen die verwendbaren Hyperparameter gesetzt und die Trainingsdaten den Modellanforderungen entsprechend übergeben werden. Für Informationen zu den Hyperparameter wird auf das Kapitel des jeweiligen Modells sowie das allgemeine Kapitel Deep Learning verwiesen. Die Trainingsdaten bestehen aus Bildern und den zugehörigen Informationen. Dieser Operator erwartet einen Batch an Trainingsdaten, übergeben durch ein Tupel von Dictionaries DLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatch. Ein solches DLSampleDLSampleDLSampleDLSampleDLSample Dictionary wird aus DLDatasetDLDatasetDLDatasetDLDatasetDLDataset für jedes einzelne Bild erzeugt, z.B. durch die Prozedur gen_dl_samples. Siehe das Kapitel Deep Learning / Modell für weitere Informationen zu den verwendeten Dictionaries und deren Schlüssel.

Die Anzahl an Bildern in einem DLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatch Tupel muss 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 Modellparameter '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 der DLSampleDLSampleDLSampleDLSampleDLSample Dictionaries, 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 DLSampleDLSampleDLSampleDLSampleDLSample Dictionaries gearbeitet wurde. Allerdings liefert diese Approximation im Allgemeinen vergleichbar gute Ergebnisse, so dass sie verwendet werden kann, wenn man mit mehr DLSampleDLSampleDLSampleDLSampleDLSample Dictionaries 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. 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.

Im Ausgabe-Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult befinden sich der aktuelle Wert der Gesamt-Zielfunktion unter dem Schlüssel total_losstotal_losstotal_losstotal_losstotalLoss sowie die Werte aller weiteren im Modell enthaltenen Zielfunktionen.

Weitere Informationen zu den Algorithmen

Ein nichtlinearer Optimierungsalgorithmus wird während des Trainings angewendet, mit dem Ziel den Wert der Gesamt-Zielfunktion zu minimieren. Diese wird basierend auf den Vorhersagen des Neuronalen Netzwerks zum aktuellen Batch von Bildern bestimmt. Der Algorithmus, der zur Optimierung genutzt wird, ist ein stochastisches Gradientenabstiegsverfahren (SGD). Er aktualisiert die Gewichte der Layer vorhergehender Iterationen , , auf die neuen Werte für Iteration wie folgt:

Hierbei ist die Lernrate, das Momentum, die Gesamt-Zielfunktion und der Gradient der Gesamt-Zielfunktion bezüglich der Gewichte. Die Variable wird genutzt um den Einfluss des Momentums miteinzubeziehen.

Die unterschiedlichen Modelle haben verschiedene Zielfunktionen implementiert, welche aufsummiert werden. Dazu kommt der Regularisierungsterm , welcher insbesondere größere Gewichte bestraft, und zusammen ergeben sie die Gesamt-Zielfunktion.

Die verschiedenen Arten von Zielfunktionen (englisch 'loss') sind:

Huber Loss (Modell mit 'type'"type""type""type""type"='detection'"detection""detection""detection""detection"):

Der gesamte 'Huber Loss' bildet sich aus der Summe der Beiträge aller Variablen der umschließenden Rechtecke für jede gefundene Instanz des Batches. Der Beitrag einer einzelnen Variable ist wie folgt definiert: Dabei ist eine Variable des umschließenden Rechtecks und ein Parameter, der auf den Wert 0.11 festgelegt ist.

Focal Loss (Modell mit 'type'"type""type""type""type"='detection'"detection""detection""detection""detection"):

Der 'Focal Loss' bildet sich aus der Summe der Beiträge für jede gefundene Instanz des Batches. Der Beitrag ist für eine einzelne Instanz wie folgt definiert: wobei ein Parameter ist, der auf den Wert 2 festgelegt ist. steht für das klassenspezifische Gewicht 'class_weight' der -ten Klasse steht und , definiert sind als Hierbei ist ein Tupel der vom Modell geschätzten Wahrscheinlichkeiten für jede der -vielen Klassen und ein One-Hot-kodierter Zielvektor, der die Klasse der Annotation kodiert.

Multinomial Logistic Loss (Modell mit 'type'"type""type""type""type"='classification'"classification""classification""classification""classification", 'segmentation'"segmentation""segmentation""segmentation""segmentation"):

Der 'Multinomial Logistic Loss' ist auch als 'Cross Entropy Loss' bekannt. Definiert ist der 'Multinomial Logistic Loss' wie folgt:

Hierbei steht für das vorhergesagte Ergebnis, welches von den Gewichten des Netzwerks und dem Eingabe-Batch abhängt. ist ein One-Hot-kodierter Zielvektor, der das Label des -ten Bildes des Batches mit -vielen Bildern kodiert und soll als Vektor verstanden werden, sodass auf jede Komponente von angewendet wird.

Der Regularisierungsterm ist eine gewichtete -Norm, die alle Gewichte, mit Ausnahme der Bias-Werte, miteinbezieht. Sein Einfluss kann durch kontrolliert werden. Letzteres steht für den Hyperparameter 'weight_prior'"weight_prior""weight_prior""weight_prior""weight_prior", der mit set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam gesetzt werden kann. Der Index läuft hierbei über alle Gewichte des Netzwerks, mit der Ausnahme von Bias-Termen. Diese werden nicht regularisiert. Der Regularisierungsterm schiebt die Gewichte gegen Null und bestraft damit insbesondere größere Gewichte, was effektiv die Komplexität des Modells verringert.

Achtung

Um diesen Operator ausführen zu können, werden cuDNN und cuBLAS benötigt, falls 'runtime'"runtime""runtime""runtime""runtime" auf 'gpu'"gpu""gpu""gpu""gpu" gesetzt ist (siehe get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam). Für weitere Details wird auf den „Installation Guide“, Abschnitt „Requirements for Deep Learning“, verwiesen.

Ausführungsinformationen

Parameter

DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle (input_control)  dl_model HDlModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Deep Learning-Modells.

DLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatchDLSampleBatch (input_control)  dict HDict, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Tupel von Dictionaries mit Eingabebildern und zugehörigen Informationen.

DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult (output_control)  dict HDict, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionary mit den Trainingsergebnissen.

Ergebnis

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

Vorgänger

read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel, set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam, get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam

Nachfolger

apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel

Siehe auch

apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel

Modul

Deep Learning Training