Erste Schritte mit Amazon SageMaker Machine Learning mit Python, Teil 2

Amazon SageMaker ist ein von AWS vollständig verwalteter Service, der den gesamten Workflow von Machine Learning abdeckt. Anhand der SageMaker-Demo von AWS illustrieren wir die wichtigsten Zusammenhänge, Grundlagen und Funktionsprinzipien.

Für unsere ersten Experimente verwenden wir das MNIST-Dataset als Trainingsdaten. Bei der MNIST-Datenbank (Modified National Institute of Standards and Technology) handelt es sich um eine sehr große Datenbank handgeschriebener Ziffern, die üblicherweise zum Trainieren verschiedener Bildverarbeitungssysteme verwendet wird.

Die Datenbank wird auch häufig für Schulungen und Tests im Bereich des maschinellen Lernens (ML) verwendet. Erstellt wurde das Dataset durch „erneutes Mischen“ der Proben aus den ursprünglichen Datensätzen des NIST-Datasets.

Der Grund dafür ist, dass die Macher der Ansicht waren, dass der NIST-Trainingsdatensatz direkt nicht für Experimente mit maschinellem Lernen geeignet ist, weil er von Mitarbeitern des American Census Bureau und der Testdatensatz von amerikanischen Schülern stammt. In der MNIST-Datenbank wurden die Schwarzweißbilder des NIST auf eine Größe von 28 x 28 Pixeln mit Anti-Aliasing und Graustufenwerte normalisiert.

Die MNIST-Datenbank handschriftlicher Ziffern umfasst aktuell einen Trainingssatz von 50.000 Beispielen sowie einen Testsatz von 10.000 Beispielen, also eine Teilmenge des NIST-Datasets. Der MNIST-Datenfundus eignet sich damit gut, um Lerntechniken und Mustererkennungsmethoden mit nur minimalem Aufwand für Vorverarbeitung und Formatierung an reale Daten auszuprobieren.

Trainingsdaten

Wir laden also im Folgenden das MNIST-Dataset auf unsere Jupyter-Notebook-Instanz herunter, überprüfen die Daten, wandeln sie um und laden sie anschließend in unser S3-Bucket hoch. Das Umwandeln der Daten geschieht mit der numpy-Bibliothek für Python, indem wir das Format von numpy.array in durch Komma getrennte Werte (CSV) ändern.

Der zum Bewerten des Trainingsfortschritts verwendete XGBoost-Algorithmus erwartet eine Eingabe im CSV- oder LIBSVM- Format, wobei letztere eine Open-Source-Bibliothek für maschinelles Lernen ist. Wir benutzen im Folgenden aber das einfacher anwendbare CSV-Format. Beginnen wir also mit dem Herunterladen des Datasets. AWS stellt dazu folgenden Beispielcode zur Verfügung.

%%time
import pickle, gzip, urllib.request, json
import numpy as np

# Load the dataset
urllib.request.urlretrieve(„http://deeplearning.net/data/mnist/mnist.pkl.gz“, „mnist.pkl.gz“)
with gzip.open(‚mnist.pkl.gz‘, ‚rb‘) as f:
   train_set, valid_set, test_set = pickle.load(f, encoding=’latin1′)
   print(train_set[0].shape)

Der Code importiert u.a. zunächst die numpy-Bibliothek unter der Kurzbezeichnung „np“, eine typische Konvention unter Python-Programmierern. Dann lädt er das MNIST-Dataset (mnist.pkl.gz) als gepacktes Archiv von der MNIST-Datenbank-Website auf das Notebook herunter, entpackt die Datei und liest die Datasets „trains_set“, „valid_set“ und „test_set“ in den Arbeitsspeicher des Notebooks ein.

Das Trainings Data-Set in Python

Das „train_set“ enthält Bilder mit handschriftlichen Zahlen zum Trainieren eines Modells. Das „valid_set“ verwendet die Bilder um mit Hilfe des o. e. XGBoost-Algorithmus den Trainingsfortschritt des Modells zu bewerten. Das „test_set“ wird später benutzt, um „Inferenzen“ zum Testen des bereitgestellten Modells abzurufen. In der Praxis würde man nun die Schulungsdaten analysieren, um festzustellen, welche Art Bereinigungen und Transformationen notwendig sind, um die Modell-Training noch zu verbessern.

Das vorbereitete MNIST-Dataset muss allerdings nicht weiter bereinigt werden, da es für eben solche Zwecke entworfen wurde. Trotzdem könnten wir nun beispielsweise die ersten fünf Bilder des „train_set“ wie folgt anzeigen lassen, wozu wir z. B. in Python das Modul „pyplot“ aus der Bibliothek „matplotlib“ verwenden und „train_set“ aus den beiden Strukturen „train_set[0]“ für die eigentlichen Bilder und „train_set[1]“ für die Labels/ Bezeichnungen besteht.

Wie oben erwähnt, verwenden wir für das Transformieren des Trainings-Datasets und das Hochladen auf S3 den XGBoost-Algorithmus. Dieser erwartet für die Trainings-Eingabe Komma separierte Werte (CSV). Das Format der Trainings-Datasets ist numpy.array. Folgender Code wandelt das Dataset aus dem numpy.array-Format in ein CSV-Format um und lädt es auf das oben erzeugte S3-Bucket hoch.

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.