Digitalisierung und Innovation / 01.03.2021 / Patrick Arnold

KI-Modelle trainieren mit der AWS Deep Java Library

Daten sind die Grundlage für die Anwendung von KI. Die Schlussfolgerungen, die die KI daraus zieht, hilft sowohl bei Entscheidungen als auch bei der Prozessvereinfachung und ermöglicht darüber hinaus sogar neue Geschäftsmodelle. Während bei einem bereits trainierten Modell wie dem vorherigen keine Trainingsdaten notwendig sind, müssen diese für das Training eines eigenen KI-Modells bereitgestellt werden. Umso mehr Daten für den gewünschten Use Case vorhanden sind, desto genauer kann die KI-Entscheidungen treffen.

Also ist unsere erste Aufgabe einen Use Case zu entwickeln, den wir in unserem Szenario umsetzen möchten. Die Datenerhebung bringt selbst noch einmal weitreichende Anforderungen mit sich. Für Übungs- und Demonstrationszwecke kann es eine sinnvolle Option sein, ein allgemeines Trainingsdataset zu nutzen – beispielsweise das „Footwear Classification Model“ der University of Texas in Austin. Im Folgenden werden die allgemeinen Schritte zum Trainieren eines Modells in einem Use Case mit vorhandenen Daten aufzeigen. 
 

KI-Training in DJL mit einem vorhandenen Datenset

Training ist der Prozess zur Erstellung eines ML-Modells. Dabei werden einem Lernalgorithmus Trainingsdaten zur Untersuchung gegeben. Der Begriff „Modell“ bezieht sich auf das Artefakt, das während des Trainingsprozesses erzeugt wird. Das Modell enthält Muster, die in den Trainingsdaten gefunden wurden und kann verwendet werden, um eine Vorhersage (oder Inferenz) zu treffen.

Beim Training werden mehrere Komplettdurchläufe (sogenannte „Epochen“) über die Trainingsdaten durchgeführt, um Muster und Trends in den Daten zu finden, die dann im Modell gespeichert werden. Das Modell wird mit den Erkenntnissen über jede Epoche aktualisiert, wodurch sich seine Genauigkeit verbessert. Für das Training schreiben wir uns eine eigene Trainingsklasse, die unsere Daten einliest, das Modell trainiert und am Ende das Modell in unserem Projekt persistiert.

Ein Dataset in DJL beschreibt eine Speicherung von Trainingsdaten. Es gibt Dataset-Implementierungen, die verwendet werden können, um Daten herunterzuladen (basierend auf einer angegebenen URL), Daten zu extrahieren und Daten automatisch in Trainings- und Validierungssätze zu trennen. Die automatische Trennung ist eine nützliche Funktion, da es wichtig ist, niemals die gleichen Daten zu verwenden, mit denen das Modell trainiert wurde, um die Leistung des Modells zu validieren.

Nachdem wir die Rohdaten in Trainings- und Validierungssätze getrennt haben, werden wir ein neuronales Netzwerk zum Trainieren des Modells verwenden. Die Trainingsdaten werden in einen sogenannten „Block“ eingegeben, also eine zusammensetzbare Einheit, die ein neuronales Netzwerk bildet. Am Ende des Trainingsprozesses stellt ein Block ein vollständig trainiertes Modell dar.

Der erste Schritt des Trainings besteht darin, eine Modellinstanz aufzubauen. Diese erstellt ein leeres Modell, konstruiert das neuronale Netz und setzt es anschließend auf das Modell. Der nächste Schritt besteht im Einrichten und Konfigurieren eines Trainers. Dabei werden auch die Trainingskonfiguration und die Hyperparameter festgelegt, um zu bestimmen, wie genau das Netz trainiert wird.

Grundsätzlich haben wir in DJL an unterschiedlichen Stellen die Möglichkeit, spezielle Konfigurationen für den Trainingsvorgang vorzunehmen. Haben wir alle gewünschten Einstellungen vorgenommen, so können wir dann den Trainingsvorgang starten, indem wir die main-Methode in unserer Testklasse ausführen.

 

Verwendung des generierten Modells

Nachdem wir unser Modell trainiert haben, können wir es verwenden, um Inferenzen (also Vorhersagen) für neue Daten durchzuführen. Mit dem Modell können wir die Klassifizierung in einem Prozess vornehmen. Möchten wir dieses Modell nun nutzen, so erzeugen wir uns zuerst eine leere Modellinstanz durch Methode getModel(). Diese leere Modellinstanz initialisieren wir dann mit unserem trainierten Modell.

Im nächsten Schritt initialisieren wir einen Predictor mit einem von uns konfigurierten Translator. In der DJL bietet ein Translator die Funktionen für die Vorbereitung und Nachbearbeitung für Klassifizierungsvorgänge. Bei CV-Modellen müssen zum Beispiel Bilder in Graustufen umgewandelt werden oder auch an die definierten Maße des Trainingsmodells angepasst werden. Solche Tätigkeiten kann ein entsprechender Translator für uns übernehmen.

 

Deep Learning - simpel für den Java Entwickler

Deep Learning ist ein sehr anspruchsvolles Gebiet. AWS hat sich mit der Deep Java Library zum Ziel gesetzt, dieses komplexe Thema der Entwickler-Community in der bekanntesten Programmiersprache näher zu bringen – und erfüllt die Erwartung. DJL bietet eine sehr gute Möglichkeit, in einfachen Schritten einen Deep Learning Use Case in Java-Applikationen zu integrieren. Doch damit nicht genug: DJL unterstützt auch bekannte Machine-Learning-Plattformen wie TensorFlow, Apache MXNet, PyTorch oder auch ONNX Runtime und ermöglicht es seinen Nutzern, die Modelle für ihre spezifischen Use Cases zu trainieren.

 

Eine ausführliche Version dieses Artikels mit praxisnahen Implementierungen und Codebeispielen ist in Ausgabe 01-2021 der Fachzeitschrift JavaSPEKTRUM zu lesen.

Einblicke

Shaping the future with our clients