Overfør læring til TensorFlow-billedklassificeringsmodeller i Amazon SageMaker

Amazon SageMaker giver en suite af indbyggede algoritmer, fortrænede modellerog forudbyggede løsningsskabeloner at hjælpe dataforskere og maskinlæringsudøvere (ML) med at komme i gang med at træne og implementere ML-modeller hurtigt. Du kan bruge disse algoritmer og modeller til både superviseret og uovervåget læring. De kan behandle forskellige typer inputdata, herunder tabel, billede og tekst.

Fra i dag leverer SageMaker en ny indbygget algoritme til billedklassificering: Billedklassificering – TensorFlow. Det er en overvåget læringsalgoritme, der understøtter overførselslæring for mange fortrænede modeller, der er tilgængelige i TensorFlow Hub. Det tager et billede som input og udsender sandsynlighed for hver af klasseetiketterne. Du kan finjustere disse fortrænede modeller ved hjælp af transfer learning, selv når et stort antal træningsbilleder ikke er tilgængelige. Det er tilgængeligt gennem SageMaker indbyggede algoritmer såvel som gennem SageMaker JumpStart UI indvendig Amazon SageMaker Studio. For mere information henvises til dens dokumentation Billedklassificering – TensorFlow og eksemplet på notesbogen Introduktion til SageMaker TensorFlow – Billedklassificering.

Billedklassificering med TensorFlow i SageMaker giver overførselslæring på mange fortrænede modeller, der er tilgængelige i TensorFlow Hub. I henhold til antallet af klassemærker i træningsdataene er der knyttet et klassifikationslag til den fortrænede TensorFlow Hub-model. Klassifikationslaget består af et udfaldslag og et tæt lag, som er et fuldt forbundet lag med 2-norm regularizer, der initialiseres med tilfældige vægte. Modeltræningen har hyperparametre for dropout-raten for dropoutlaget og L2-regulariseringsfaktoren for det tætte lag. Så kan enten hele netværket, inklusive den præ-trænede model, eller kun det øverste klassifikationslag finjusteres på de nye træningsdata. I denne overførselsindlæringstilstand kan du opnå træning selv med et mindre datasæt.

Sådan bruger du den nye TensorFlow-billedklassificeringsalgoritme

Dette afsnit beskriver, hvordan du bruger TensorFlow-billedklassificeringsalgoritmen med SageMaker Python SDK. For information om, hvordan du bruger det fra Studio UI, se SageMaker JumpStart.

Algoritmen understøtter overførselslæring for de fortrænede modeller, der er anført i TensorFlow Hub-modeller. Hver model er identificeret med en unik model_id. Følgende kode viser, hvordan du finjusterer MobileNet V2 1.00 224 identificeret ved model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 på et tilpasset træningsdatasæt. For hver model_id, for at lancere et SageMaker-uddannelsesjob gennem Estimator klasse af SageMaker Python SDK, skal du hente Docker-image-URI, træningsscript-URI og forudtrænede model-URI gennem hjælpefunktionerne i SageMaker. Træningsscriptets URI indeholder al den nødvendige kode til databehandling, indlæsning af den præ-trænede model, modeltræning og lagring af den trænede model til slutning. Den præ-trænede model-URI indeholder den præ-trænede modelarkitekturdefinition og modelparametrene. Bemærk, at Docker-image-URI og træningsscript-URI er de samme for alle TensorFlow-billedklassificeringsmodellerne. Den fortrænede model-URI er specifik for den pågældende model. De fortrænede model tarballs er blevet forhåndsdownloadet fra TensorFlow Hub og gemt med den passende modelsignatur i Amazon Simple Storage Service (Amazon S3) buckets, sådan at træningsjobbet kører i netværksisolation. Se følgende kode:

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"

Med disse modelspecifikke træningsartefakter kan du konstruere et objekt af 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,
)

Dernæst, for at overføre læring på dit brugerdefinerede datasæt, skal du muligvis ændre standardværdierne for træningshyperparametrene, som er angivet i Hyperparametre. Du kan hente en Python-ordbog over disse hyperparametre med deres standardværdier ved at kalde hyperparameters.retrieve_default, opdater dem efter behov, og send dem derefter til Estimator-klassen. Bemærk, at standardværdierne for nogle af hyperparametrene er forskellige for forskellige modeller. For store modeller er standard batchstørrelsen mindre og train_only_top_layer hyperparameter er sat til True. Hyperparameteren Train_only_top_layer definerer, hvilke modelparametre, der ændres under finjusteringsprocessen. Hvis train_only_top_layer is Trueparametrene for klassifikationslagene ændres, og resten af ​​parametrene forbliver konstante under finjusteringsprocessen. På den anden side, hvis train_only_top_layer is False, alle parametre i modellen er finjusteret. Se følgende kode:

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"

Følgende kode giver et standard træningsdatasæt, der hostes i S3 buckets. Vi leverer tf_flowers datasæt som et standarddatasæt til finjustering af modellerne. Datasættet består af billeder af fem typer blomster. Datasættet er blevet downloadet fra TensorFlow under Apache 2.0-licens.

# 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}"

Til sidst, for at lancere SageMaker træningsjobbet til finjustering af modellen, ring .fit på genstanden for Estimator-klassen, mens du passerer S3-placeringen af ​​træningsdatasættet:

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

For mere information om, hvordan du bruger den nye SageMaker TensorFlow billedklassificeringsalgoritme til overførsel af læring på et brugerdefineret datasæt, implementer den finjusterede model, kør inferens på den implementerede model og implementer den forudtrænede model, som den er, uden først at finjustere på et brugerdefineret datasæt, se følgende eksempel på notesbog: Introduktion til SageMaker TensorFlow – Billedklassificering.

Input/output-interface til TensorFlow-billedklassificeringsalgoritmen

Du kan finjustere hver af de fortrænede modeller, der er anført i TensorFlow Hub-modeller til ethvert givet datasæt, der omfatter billeder, der tilhører et vilkårligt antal klasser. Målet er at minimere forudsigelsesfejl på inputdata. Den model, der returneres ved finjustering, kan videreudvikles til slutninger. Følgende er instruktionerne for, hvordan træningsdataene skal formateres til input til modellen:

  • Input – En mappe med lige så mange undermapper som antallet af klasser. Hver undermappe skal have billeder tilhørende den pågældende klasse i .jpg-, .jpeg- eller .png-format.
  • Produktion – En finjusteret model, der kan implementeres til inferens eller kan trænes yderligere ved hjælp af inkrementel træning. En for- og efterbehandlingssignatur føjes til den finjusterede model, så den tager rå .jpg-billede som input og returnerer klassesandsynligheder. En fil, der kortlægger klasseindekser til klasseetiketter, gemmes sammen med modellerne.

Indtastningsmappen skal se ud som følgende eksempel, hvis træningsdataene indeholder billeder fra to klasser: roses , dandelion. S3-stien skulle se ud s3://bucket_name/input_directory/. Bemærk efterfølgen / er påkrævet. Navnene på mapperne og roses, dandelion, og .jpg-filnavnene kan være hvad som helst. Etiketkortlægningsfilen, der er gemt sammen med den trænede model på S3-bøtten, kortlægger mappenavnene roser og mælkebøtte til indekserne på listen over klassesandsynligheder, som modellen udlæser. Kortlægningen følger alfabetisk rækkefølge af mappenavnene. I det følgende eksempel svarer indeks 0 i modeloutputlisten til dandelion, og indeks 1 svarer til roses.

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

Inferens med TensorFlow-billedklassificeringsalgoritmen

De genererede modeller kan hostes til inferens og understøtter kodede .jpg, .jpeg og .png billedformater som application/x-image indholdstype. Størrelsen på inputbilledet ændres automatisk. Outputtet indeholder sandsynlighedsværdierne, klasseetiketterne for alle klasser og den forudsagte etiket, der svarer til klasseindekset med den højeste sandsynlighed, kodet i JSON-format. TensorFlow-billedklassificeringsmodellen behandler et enkelt billede pr. anmodning og udsender kun én linje i JSON. Følgende er et eksempel på et svar i 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 er sat til application/json, så udsender modellen kun sandsynligheder. For flere detaljer om træning og slutninger, se eksempelnotesbogen Introduktion til SageMaker TensorFlow – Billedklassificering.

Brug SageMaker indbyggede algoritmer gennem JumpStart UI

Du kan også bruge SageMaker TensorFlow billedklassificering og enhver af de andre indbyggede algoritmer med et par klik via JumpStart UI. JumpStart er en SageMaker-funktion, der giver dig mulighed for at træne og implementere indbyggede algoritmer og præ-trænede modeller fra forskellige ML-frameworks og modelhubs gennem en grafisk grænseflade. Det giver dig også mulighed for at implementere fuldt udbyggede ML-løsninger, der samler ML-modeller og forskellige andre AWS-tjenester for at løse en målrettet use case. Tjek ud Kør tekstklassificering med Amazon SageMaker JumpStart ved hjælp af TensorFlow Hub og Hugging Face-modeller for at finde ud af, hvordan man bruger JumpStart til at træne en algoritme eller fortrænet model med få klik.

Konklusion

I dette indlæg annoncerede vi lanceringen af ​​den indbyggede SageMaker TensorFlow billedklassificeringsalgoritme. Vi leverede eksempelkode på, hvordan man udfører overførselslæring på et brugerdefineret datasæt ved hjælp af en præ-trænet model fra TensorFlow Hub ved hjælp af denne algoritme. For mere information, tjek dokumentation og eksempel notesbog.


Om forfatterne

Overfør læring til TensorFlow-billedklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Dr. Ashish Khetan er Senior Applied Scientist med Amazon SageMaker indbyggede algoritmer og hjælper med at udvikle maskinlæringsalgoritmer. Han fik sin ph.d. fra University of Illinois Urbana-Champaign. Han er en aktiv forsker i maskinlæring og statistisk inferens og har publiceret mange artikler i NeurIPS, ICML, ICLR, JMLR, ACL og EMNLP konferencer.

Overfør læring til TensorFlow-billedklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Dr. Vivek Madan er en anvendt videnskabsmand med Amazon SageMaker JumpStart team. Han fik sin ph.d. fra University of Illinois Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker i maskinlæring og algoritmedesign og har publiceret artikler i EMNLP, ICLR, COLT, FOCS og SODA konferencer.

Overfør læring til TensorFlow-billedklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.João Moura er AI/ML Specialist Solutions Architect hos Amazon Web Services. Han er for det meste fokuseret på NLP-brugscases og hjælper kunder med at optimere træning og implementering af deep learning-modeller. Han er også en aktiv fortaler for lavkode ML-løsninger og ML-specialiseret hardware.

Overfør læring til TensorFlow-billedklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Raju Penmatcha er Senior AI/ML Specialist Solutions Architect hos AWS. Han arbejder med uddannelses-, regerings- og nonprofitkunder om maskinlæring og kunstig intelligens-relaterede projekter, og hjælper dem med at bygge løsninger ved hjælp af AWS. Når han ikke hjælper kunder, kan han godt lide at rejse til nye steder.

Tidsstempel:

Mere fra AWS maskinindlæring