Dieser Teil läuft analog zu Trainiere ein eigenes Modell mit TensorFlow. Wenn das eigene Problem bereits zufriedenstellend mit einem PhotonAI Modell gelöst werden konnte, kann dieses Kapitel also übersprungen werden. Andererseits wird die Erstellung eines Modells in diesem Kapitel noch knapper behandelt und es kann durchaus sinnvoll sein, zunächst das vorherige Kapitel zu lesen. Abgesehen davon handelt es sich ebenfalls nicht um eine Einführung in PyTorch oder die Erstellung von Machine Learning Modellen allgemein. Vielmehr soll lediglich ein einfaches Modell erstellt werden, das in den folgenden Teilen als Beispiel im Deployment- und Veröffentlichungs-Prozess dient. Die PyTorch Tutorials helfen dabei, mehr über die Erstellung von Machine Learning Modellen mit PyTorch zu lernen.
PyTorch ist ein Open-Source-Deep-Learning-Framework, das besonders für seine flexible und dynamische Berechnungsgraphen-Struktur bekannt ist. Es erleichtert das Trainieren von neuronalen Netzen durch eine intuitive Schnittstelle und bietet umfangreiche Unterstützung für mehrdimensionale Datenverarbeitung. PyTorch ermöglicht es Entwicklern, Modelle auf verschiedene Plattformen zu deployen, einschließlich mobiler Geräte. Das Framework bietet eine breite Palette von Funktionen und Module, um individuelle Anforderungen zu erfüllen.
Für Python kann PyTorch im Terminal direkt über pip installiert werden:
Zunächst definieren wir wieder unsere Daten und Projekt-Struktur. In diesem Fall befinden wir uns mit dem Notebook im Ordner /incubaitor/1_3_Torch/notebooks/. Relativ dazu haben wir nun die Daten in den Ordner /incubaitor/1_3_Torch/data/ geladen und werden unsere Modelle in /incubaitor/1_3_Torch/models/ abspeichern. Somit können wir die relativen Pfade ../data/ und ../models/ nutzen. Falls es hier Probleme gibt, können auch explizite Pfade wie im PhotonAI Beispiel genutzt werden.
Nachdem wir alle Libraries und Funktionen importiert haben, bereiten wir analog zum TensorFlow-Tutorial erst unsere Daten vor. Wichtig ist hierbei, dass wir unsere Daten in die Datenstruktur torch.tensor() packen, mit der PyTorch alle Berechnungen effizient durchführen kann.
Ähnlich zu TensorFlow benutzen wir hier den Container nn.Sequential, mit dem wir uns ein einfaches Multilayer-Perceptron (MLP) mit zwei Hidden-Layern der Größe 64 und mit ReLU-Aktivierung erstellen:
Anders als TensorFlow besitzt PyTorch nicht die Funktionen compile() und fit(), um das MLP zu trainieren. Stattdessen müssen wir das Training selber mit der Funktion train_model() implementieren. Dazu geben wir auch eine Loss-Funktion und einen Optimizer an, sowie die Anzahl der Epochen und die Größe unserer Batches.
Während des Trainings werden wir in der Konsole regelmäßig über den Trainingsfortschritt informiert. Dadurch können wir einschätzen wie lange das Training noch etwa braucht und kontrollieren, dass der Loss tatsächlich abnimmt und unser Modell konvergiert.
Um das Modell zu evaluieren, schreiben wir uns wiederum eine Funktion evaluate_model(), die uns den Test-Loss in zwei verschiedenen Metriken ausgibt. Außerdem wollen wir wieder unsere Ergebnisse visualisieren und machen dies analog zum TensorFlow Tutorial.
Um das Modell zu speichern, können wir ganz einfach torch.save() benutzen, der das Modell am gewünschten Pfad speichert. Außerdem speichern wir wieder alle unsere Encoder und Scaler, um unsere Eingabedaten korrekt vorbereiten zu können.
Um das Modell zur Vorhersage zu benutzen, laden wir es mit torch.load() und erstellen uns einen DataFrame, in den wir Beispiel-Daten speichern. Hierbei ist wiederum darauf zu achten, dass die Daten in torch.tensor() gewrappt werden.
Schließlich können wir den Preis des Beispiel-Autos vorhersagen:
Als Ergebnis wird etwa 26788.51 ausgegeben, was nah an dem Ergebnis des PhotonAI-Modells und des TensorFlow-Modells liegt und ebenfalls einem realistischen Preis entspricht.
Wir konnten mit PyTorch also ein eigenes Modell entwerfen, trainieren und nun sogar verwenden. Dafür waren zwar deutlich mehr manuelle Schritte notwendig, die uns zuvor von der PhotonAI Hyperpipe abgenommen wurden, im Ausgleich konnten wir jedoch auch kategorische Features für unsere Vorhersage nutzen.