train_dl_model_batch — Trainieren eines Deep Learning-Modells.
train_dl_model_batch( : : DLModelHandle, DLSampleBatch : DLTrainResult)
Der Operator train_dl_model_batch führt einen Trainingsschritt
des in DLModelHandle enthaltenen Deep Learning-Modells aus.
Die aktuellen Zielfuntions-Werte werden im Dictionary
DLTrainResult zurückgegeben.
Ein Trainingsschritt bedeutet hier das einmalige Aktualisieren der
Gewichte, basierend auf dem Batch mit Bildern, der in DLSampleBatch
gegeben ist.
Der Optimierungsalgorithmus, der dazu genutzt wird, ist im Abschnitt
„Weitere Informationen zu den Algorithmen“ wetier unten genauer erklärt.
Für weitere Informationen zum Trainieren eines Netzwerks, siehe
Unterkapitel „Das Netzwerk und dessen Training“ 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 DLSampleBatch.
Somit enthält das Tupel DLSampleBatch genau 'batch_size'
Dictionaries DLSample. Ein solches 'DLSample' wird
aus DLDataset 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.
Im Ausgabe-Dictionary DLTrainResult befinden sich der
aktuelle Wert der Gesamt-Zielfunktion unter dem Schlüssel
total_loss sowie die Werte aller weiteren im Modell enthaltenen
Zielfunktionen.
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 inbesondere größere Gewichte bestraft, und zusammen ergeben sie die Gesamt-Zielfunktion.
Die verschiedenen Arten von Zielfunktionen (englisch 'loss') sind:
Huber Loss (Modell mit
'type'='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'='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'='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',
der mit set_dl_model_param 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.
Um diesen Operator ausführen zu können, werden cuDNN und cuBLAS benötigt,
falls 'runtime' auf 'gpu' gesetzt ist
(siehe get_dl_model_param).
Für weitere Details wird auf den „Installation Guide“, Abschnitt
„Requirements for Deep Learning“, verwiesen.
DLModelHandle (input_control) dl_model → (handle)
Handle des Deep Learning-Modells.
DLSampleBatch (input_control) dict → (handle)
Tupel von Dictionaries mit Eingabebildern und zugehörigen Informationen.
DLTrainResult (output_control) dict → (handle)
Dictionary mit den Trainingsergebnissen.
Sind die Parameterwerte korrekt, dann liefert
train_dl_model_batch den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
read_dl_model,
set_dl_model_param,
get_dl_model_param
Deep Learning Training