train_dl_classifier_batch
— Ausführen eines Trainingsschrittes eines Deep Learning-basierten
Klassifikators auf Basis eines Batches von Bildern.
train_dl_classifier_batch
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_batch
verwenden.
train_dl_classifier_batch(BatchImages : : DLClassifierHandle, BatchLabels : DLClassifierTrainResultHandle)
train_dl_classifier_batch
führt einen Trainingsschritt für den
Deep Learning-basierten Klassifikator in DLClassifierHandle
aus,
welcher zuvor mit read_dl_classifier
eingelesen wurde.
Bevor der Trainingsschritt ausgeführt werden kann, müssen die Klassen
mittels set_dl_classifier_param
gesetzt werden.
Zudem empfiehlt es sich, für die Optimierung wichtige Hyperparameter wie
die Lernrate und das Momentum mit set_dl_classifier_param
zu setzen.
Der Trainingsschritt für das Neuronale Netzwerk basiert auf den Daten eines
einzelnen Batches aus dem Trainings-Datensatz, d.h. den Bilder
BatchImages
und zugehörigen Labels BatchLabels
.
Dabei muss die Anzahl der Bilder des Batches einem Vielfachen der
'batch_size' entsprechen, wobei der Parameter
'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'
auf einen Wert größer 1 gesetzt werden. Die Anzahl an Bildern, die
dem Trainings-Operator übergeben werden, beträgt 'batch_size'
mal 'batch_size_multiplier' . Dabei sei angemerkt, dass ein
Trainingsschritt auf einem Batch mit einem 'batch_size_multiplier'
größer 1 eine Approximation eines Trainingsschrittes ist, der auf dem
gleichen Batch, aber mit einem 'batch_size_multiplier' von 1
und einer entsprechend größeren 'batch_size' berechnet wurde.
Beispielsweise kann man Unterschiede erwarten zwischen Werten, die mit
einer 'batch_size' von 4 und 'batch_size_multiplier'
von 2 berechnet wurden, und Werten, die mit einer 'batch_size'
von 8 und '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'
von 1 und einem entsprechend großen 'batch_size_multiplier'
nicht die erwartete Performance zeigt, was beispielsweise bei der
Verwendung des vortrainierten Netzes
'pretrained_dl_classifier_resnet50.hdl' auftreten kann. Das
Problem kann in den meisten Fällen gelöst werden, indem die
'batch_size' auf einen Wert größer 1 gesetzt wird.
Man beachte außerdem, dass die Bilder in BatchImages
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_classifier
und
set_dl_classifier_param
.
Die Labels in BatchImages
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_param
über
'classes' gesetzt wurde.
Informationen über die Resultate des Trainingsschrittes wie der Wert der
Zielfunktion werden in DLClassifierTrainResultHandle
gespeichert
und können mit get_dl_classifier_train_result
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_batch
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' und kann mit
set_dl_classifier_param
gesetzt werden.
Für einen besseren Einblick kann mit dem Operator
get_dl_classifier_train_result
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.
Der Operator train_dl_classifier_batch
basiert auf Algorithmen, die
in manchen Fällen nicht deterministisch sind. Daher können Ergebnisse von
mehreren Aufrufen von train_dl_classifier_batch
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.
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.
BatchImages
(input_object) (multichannel-)image(-array) →
object (real)
Bilder zusammengefasst in einem Batch.
DLClassifierHandle
(input_control) dl_classifier →
(handle)
Handle des Deep Learning-basierten Klassifikators.
BatchLabels
(input_control) string-array →
(string / integer)
Labels der Bilder in dem Batch
Defaultwert: []
Werteliste: []
DLClassifierTrainResultHandle
(output_control) dl_classifier_train_result →
(handle)
Handle der Trainingsresultate des Deep Learning-basierten Klassifikators.
Sind die Parameterwerte korrekt, dann liefert
get_dl_classifier_train_result
den Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
read_dl_classifier
,
set_dl_classifier_param
,
get_dl_classifier_param
get_dl_classifier_train_result
,
apply_dl_classifier
,
clear_dl_classifier_train_result
,
clear_dl_classifier
train_dl_model_batch
,
train_class_mlp
,
train_class_svm
Deep Learning Training