Transfer Learning für TensorFlow-Bildklassifizierungsmodelle in Amazon SageMaker

Amazon Sage Maker bietet eine Reihe von eingebaute Algorithmen, vorgefertigte Modelle und vorgefertigte Lösungsvorlagen um Datenwissenschaftler und Praktiker des maschinellen Lernens (ML) beim schnellen Einstieg in das Training und die Bereitstellung von ML-Modellen zu unterstützen. Sie können diese Algorithmen und Modelle sowohl für überwachtes als auch für unüberwachtes Lernen verwenden. Sie können verschiedene Arten von Eingabedaten verarbeiten, darunter Tabellen, Bilder und Text.

Ab heute bietet SageMaker einen neuen integrierten Algorithmus zur Bildklassifizierung: Bildklassifizierung – TensorFlow. Es handelt sich um einen überwachten Lernalgorithmus, der das Transferlernen für viele vortrainierte Modelle unterstützt, die in verfügbar sind TensorFlow-Hub. Es nimmt ein Bild als Eingabe und gibt die Wahrscheinlichkeit für jede der Klassenbezeichnungen aus. Sie können diese vortrainierten Modelle mithilfe von Transfer Learning optimieren, selbst wenn eine große Anzahl von Trainingsbildern nicht verfügbar ist. Es ist über den SageMaker verfügbar eingebaute Algorithmen sowie durch die SageMaker JumpStart-Benutzeroberfläche innerhalb Amazon SageMaker-Studio. Weitere Informationen finden Sie in der zugehörigen Dokumentation Bildklassifizierung – TensorFlow und das Beispiel-Notizbuch Einführung in SageMaker TensorFlow – Bildklassifizierung.

Die Bildklassifizierung mit TensorFlow in SageMaker bietet Transfer Learning für viele vortrainierte Modelle, die in TensorFlow Hub verfügbar sind. Entsprechend der Anzahl der Klassenbezeichnungen in den Trainingsdaten wird eine Klassifizierungsschicht an das vortrainierte TensorFlow Hub-Modell angehängt. Die Klassifizierungsschicht besteht aus einer Dropout-Schicht und einer dichten Schicht, bei der es sich um eine vollständig verbundene Schicht mit 2-Norm-Regularisierer handelt, die mit Zufallsgewichten initialisiert wird. Das Modelltraining hat Hyperparameter für die Dropout-Rate der Dropout-Schicht und den L2-Regularisierungsfaktor für die dichte Schicht. Dann kann entweder das gesamte Netzwerk, einschließlich des vortrainierten Modells, oder nur die oberste Klassifizierungsschicht auf die neuen Trainingsdaten abgestimmt werden. In diesem Transfer-Lernmodus können Sie auch mit einem kleineren Datensatz trainieren.

So verwenden Sie den neuen TensorFlow-Bildklassifizierungsalgorithmus

In diesem Abschnitt wird beschrieben, wie Sie den TensorFlow-Bildklassifizierungsalgorithmus mit verwenden SageMaker Python-SDK. Informationen zur Verwendung über die Studio-Benutzeroberfläche finden Sie unter SageMaker-JumpStart.

Der Algorithmus unterstützt das Transferlernen für die in aufgeführten vortrainierten Modelle TensorFlow Hub-Modelle. Jedes Modell wird durch ein Unikat identifiziert model_id. Der folgende Code zeigt die Feinabstimmung von MobileNet V2 1.00 224, identifiziert durch model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 auf einem benutzerdefinierten Trainingsdatensatz. Für jeden model_id, um einen SageMaker-Schulungsjob über die zu starten Estimator -Klasse des SageMaker Python SDK müssen Sie den Docker-Image-URI, den Trainingsskript-URI und den vortrainierten Modell-URI über die in SageMaker bereitgestellten Hilfsfunktionen abrufen. Der Trainingsskript-URI enthält den gesamten erforderlichen Code für die Datenverarbeitung, das Laden des vorab trainierten Modells, das Modelltraining und das Speichern des trainierten Modells für die Inferenz. Der URI des vortrainierten Modells enthält die Architekturdefinition des vortrainierten Modells und die Modellparameter. Beachten Sie, dass der Docker-Image-URI und der Trainingsskript-URI für alle TensorFlow-Image-Klassifizierungsmodelle gleich sind. Der vortrainierte Modell-URI ist spezifisch für das jeweilige Modell. Die vortrainierten Modell-Tarballs wurden vorab von TensorFlow Hub heruntergeladen und mit der entsprechenden Modellsignatur gespeichert Amazon Simple Storage-Service (Amazon S3)-Buckets, sodass der Trainingsjob in Netzwerkisolation ausgeführt wird. Siehe folgenden Code:

from sagemaker import image_uris, model_uris, script_uris
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Mit diesen modellspezifischen Trainingsartefakten können Sie ein Objekt der erstellen Estimator Klasse:

# Create SageMaker Estimator instance
tf_ic_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

Als Nächstes müssen Sie für das Transferlernen in Ihrem benutzerdefinierten Dataset möglicherweise die Standardwerte der Trainings-Hyperparameter ändern, die in aufgeführt sind Hyperparameter. Sie können ein Python-Wörterbuch dieser Hyperparameter mit ihren Standardwerten abrufen, indem Sie aufrufen hyperparameters.retrieve_default, aktualisieren Sie sie nach Bedarf und übergeben Sie sie dann an die Estimator-Klasse. Beachten Sie, dass die Standardwerte einiger Hyperparameter für verschiedene Modelle unterschiedlich sind. Bei großen Modellen ist die Standardstapelgröße kleiner und die train_only_top_layer hyperparameter ist auf gesetzt True. Der Hyperparameter Train_only_top_layer definiert, welche Modellparameter sich während des Feinabstimmungsprozesses ändern. Wenn train_only_top_layer is Trueändern sich Parameter der Klassifikationsschichten und die restlichen Parameter bleiben während des Feinabstimmungsprozesses konstant. Andererseits, wenn train_only_top_layer is Falsewerden alle Parameter des Modells feinabgestimmt. Siehe folgenden Code:

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

Der folgende Code stellt ein standardmäßiges Trainings-Dataset bereit, das in S3-Buckets gehostet wird. Wir bieten die tf_flowers Datensatz als Standarddatensatz für die Feinabstimmung der Modelle. Der Datensatz umfasst Bilder von fünf Blumenarten. Der Datensatz wurde heruntergeladen von TensorFlow unter dem Apache 2.0 Lizenz.

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/tf_flowers/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Um schließlich den SageMaker-Trainingsjob für die Feinabstimmung des Modells zu starten, rufen Sie an .fit auf dem Objekt der Estimator-Klasse, während der S3-Speicherort des Trainingsdatensatzes übergeben wird:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Weitere Informationen zur Verwendung des neuen SageMaker TensorFlow-Bildklassifizierungsalgorithmus für Transfer Learning auf einem benutzerdefinierten Dataset, Bereitstellen des feinabgestimmten Modells, Ausführen von Inferenzen auf dem bereitgestellten Modell und Bereitstellen des vortrainierten Modells ohne vorherige Feinabstimmung für ein benutzerdefiniertes Dataset finden Sie im folgenden Beispiel-Notebook: Einführung in SageMaker TensorFlow – Bildklassifizierung.

Eingabe-/Ausgabeschnittstelle für den TensorFlow-Bildklassifizierungsalgorithmus

Sie können jedes der in aufgeführten vortrainierten Modelle optimieren TensorFlow Hub-Modelle auf einen beliebigen gegebenen Datensatz, der Bilder umfasst, die zu einer beliebigen Anzahl von Klassen gehören. Ziel ist es, Vorhersagefehler bei den Eingabedaten zu minimieren. Das durch die Feinabstimmung zurückgegebene Modell kann für die Inferenz weiter eingesetzt werden. Im Folgenden finden Sie Anweisungen dazu, wie die Trainingsdaten für die Eingabe in das Modell formatiert werden sollten:

  • zufuhr – Ein Verzeichnis mit so vielen Unterverzeichnissen wie Klassen vorhanden sind. Jedes Unterverzeichnis sollte Bilder dieser Klasse im .jpg-, .jpeg- oder .png-Format enthalten.
  • Output – Ein fein abgestimmtes Modell, das für Inferenz eingesetzt oder durch inkrementelles Training weiter trainiert werden kann. Dem feinabgestimmten Modell wird eine Vorverarbeitungs- und Nachverarbeitungssignatur hinzugefügt, sodass es ein .jpg-Rohbild als Eingabe verwendet und Klassenwahrscheinlichkeiten zurückgibt. Zusammen mit den Modellen wird eine Datei gespeichert, die Klassenindizes Klassenkennzeichnungen zuordnet.

Das Eingabeverzeichnis sollte wie im folgenden Beispiel aussehen, wenn die Trainingsdaten Bilder aus zwei Klassen enthalten: roses und dandelion. Der S3-Pfad sollte so aussehen s3://bucket_name/input_directory/. Beachten Sie die nachgestellte / ist nötig. Die Namen der Ordner und roses, dandelion, und die .jpg-Dateinamen können beliebig sein. Die Label-Mapping-Datei, die zusammen mit dem trainierten Modell im S3-Bucket gespeichert wird, ordnet die Ordnernamen roses und dandelion den Indizes in der Liste der Klassenwahrscheinlichkeiten zu, die das Modell ausgibt. Die Zuordnung folgt der alphabetischen Reihenfolge der Ordnernamen. Im folgenden Beispiel entspricht Index 0 in der Modellausgabeliste dandelion, und Index 1 entspricht roses.

input_directory
    |--roses
        |--abc.jpg
        |--def.jpg
    |--dandelion
        |--ghi.jpg
        |--jkl.jpg

Inferenz mit dem TensorFlow-Bildklassifizierungsalgorithmus

Die generierten Modelle können für Inferenz gehostet werden und unterstützen kodierte .jpg-, .jpeg- und .png-Bildformate als application/x-image Inhaltstyp. Die Größe des Eingabebildes wird automatisch angepasst. Die Ausgabe enthält die Wahrscheinlichkeitswerte, die Klassenbezeichnungen für alle Klassen und die vorhergesagte Bezeichnung, die dem Klassenindex mit der höchsten Wahrscheinlichkeit entspricht, codiert im JSON-Format. Das TensorFlow-Bildklassifizierungsmodell verarbeitet ein einzelnes Bild pro Anfrage und gibt nur eine Zeile im JSON aus. Das Folgende ist ein Beispiel für eine Antwort in JSON:

accept: application/json;verbose

 {"probabilities": [prob_0, prob_1, prob_2, ...],
  "labels":        [label_0, label_1, label_2, ...],
  "predicted_label": predicted_label}

If accept eingestellt ist application/json, dann gibt das Modell nur Wahrscheinlichkeiten aus. Weitere Einzelheiten zu Training und Inferenz finden Sie im Beispielnotebook Einführung in SageMaker TensorFlow – Bildklassifizierung.

Verwenden Sie die integrierten SageMaker-Algorithmen über die JumpStart-Benutzeroberfläche

Sie können auch die Bildklassifizierung von SageMaker TensorFlow und alle anderen integrierten Algorithmen mit wenigen Klicks über die JumpStart-Benutzeroberfläche verwenden. JumpStart ist eine SageMaker-Funktion, mit der Sie integrierte Algorithmen und vortrainierte Modelle aus verschiedenen ML-Frameworks und Modell-Hubs über eine grafische Oberfläche trainieren und bereitstellen können. Es ermöglicht Ihnen auch, vollwertige ML-Lösungen bereitzustellen, die ML-Modelle und verschiedene andere AWS-Services aneinanderreihen, um einen gezielten Anwendungsfall zu lösen. Kasse Führen Sie die Textklassifizierung mit Amazon SageMaker JumpStart mithilfe von TensorFlow Hub- und Hugging Face-Modellen durch um herauszufinden, wie Sie mit JumpStart einen Algorithmus oder ein vortrainiertes Modell mit wenigen Klicks trainieren können.

Zusammenfassung

In diesem Beitrag haben wir die Einführung des integrierten Bildklassifizierungsalgorithmus SageMaker TensorFlow angekündigt. Wir haben Beispielcode bereitgestellt, wie Transfer Learning für einen benutzerdefinierten Datensatz unter Verwendung eines vortrainierten Modells von TensorFlow Hub mit diesem Algorithmus durchgeführt wird. Weitere Informationen finden Sie unter Dokumentation und für Beispiel Notizbuch.


Über die Autoren

Übertragen Sie das Lernen für TensorFlow-Bildklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Dr. Ashish Khetan ist Senior Applied Scientist mit Integrierte Amazon SageMaker-Algorithmen und hilft bei der Entwicklung von Algorithmen für maschinelles Lernen. Er promovierte an der University of Illinois Urbana-Champaign. Er ist ein aktiver Forscher auf dem Gebiet des maschinellen Lernens und der statistischen Inferenz und hat viele Artikel auf den Konferenzen NeurIPS, ICML, ICLR, JMLR, ACL und EMNLP veröffentlicht.

Übertragen Sie das Lernen für TensorFlow-Bildklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Vivek Madan ist Angewandte Wissenschaftlerin bei der Amazon SageMaker JumpStart-Team. Er promovierte an der University of Illinois Urbana-Champaign und war Postdoktorand an der Georgia Tech. Er ist ein aktiver Forscher in den Bereichen maschinelles Lernen und Algorithmendesign und hat Artikel auf Konferenzen von EMNLP, ICLR, COLT, FOCS und SODA veröffentlicht.

Übertragen Sie das Lernen für TensorFlow-Bildklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Joao Moura ist AI/ML Specialist Solutions Architect bei Amazon Web Services. Er konzentriert sich hauptsächlich auf NLP-Anwendungsfälle und hilft Kunden, das Training und die Bereitstellung von Deep-Learning-Modellen zu optimieren. Er ist auch ein aktiver Befürworter von Low-Code-ML-Lösungen und ML-spezialisierter Hardware.

Übertragen Sie das Lernen für TensorFlow-Bildklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Raju Penmatcha ist Senior AI / ML Specialist Solutions Architect bei AWS. Er arbeitet mit Bildungs-, Regierungs- und gemeinnützigen Kunden an Projekten im Zusammenhang mit maschinellem Lernen und künstlicher Intelligenz und hilft ihnen dabei, Lösungen mit AWS zu entwickeln. Wenn er Kunden nicht hilft, reist er gerne an neue Orte.

Zeitstempel:

Mehr von AWS Maschinelles Lernen