Overfør læring for TensorFlow bildeklassifiseringsmodeller i Amazon SageMaker

Amazon SageMaker gir en suite av innebygde algoritmer, ferdig trente modellerog forhåndsbygde løsningsmaler for å hjelpe dataforskere og maskinlæringsutøvere (ML) med å komme raskt i gang med opplæring og distribusjon av ML-modeller. Du kan bruke disse algoritmene og modellene for både veiledet og uovervåket læring. De kan behandle ulike typer inndata, inkludert tabeller, bilder og tekst.

Fra og med i dag tilbyr SageMaker en ny innebygd algoritme for bildeklassifisering: Bildeklassifisering – TensorFlow. Det er en overvåket læringsalgoritme som støtter overføringslæring for mange forhåndstrente modeller tilgjengelig i TensorFlow Hub. Den tar et bilde som input og gir ut sannsynlighet for hver av klasseetikettene. Du kan finjustere disse forhåndstrente modellene ved å bruke overføringslæring selv når et stort antall treningsbilder ikke er tilgjengelig. Den er tilgjengelig gjennom SageMaker innebygde algoritmer så vel som gjennom SageMaker JumpStart UI innsiden Amazon SageMaker Studio. For mer informasjon, se dokumentasjonen Bildeklassifisering – TensorFlow og eksempelnotisboken Introduksjon til SageMaker TensorFlow – Bildeklassifisering.

Bildeklassifisering med TensorFlow i SageMaker gir overføringslæring på mange ferdigtrente modeller tilgjengelig i TensorFlow Hub. I henhold til antall klasseetiketter i treningsdataene, er et klassifiseringslag knyttet til den ferdigtrente TensorFlow Hub-modellen. Klassifiseringslaget består av et utfallslag og et tett lag, som er et fullt sammenkoblet lag med 2-norm regularizer som initialiseres med tilfeldige vekter. Modelltreningen har hyperparametre for frafallsraten til frafallslaget og L2-regulariseringsfaktoren for det tette laget. Da kan enten hele nettverket, inkludert den forhåndstrente modellen, eller bare det øverste klassifiseringslaget finjusteres på de nye treningsdataene. I denne overføringslæringsmodusen kan du oppnå trening selv med et mindre datasett.

Slik bruker du den nye TensorFlow-bildeklassifiseringsalgoritmen

Denne delen beskriver hvordan du bruker TensorFlow-bildeklassifiseringsalgoritmen med SageMaker Python SDK. For informasjon om hvordan du bruker det fra Studio UI, se SageMaker JumpStart.

Algoritmen støtter overføringslæring for de forhåndstrente modellene som er oppført i TensorFlow Hub-modeller. Hver modell er identifisert med en unik model_id. Følgende kode viser hvordan du finjusterer MobileNet V2 1.00 224 identifisert av model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 på et tilpasset opplæringsdatasett. For hver model_id, for å lansere en SageMaker-treningsjobb gjennom Estimator klasse av SageMaker Python SDK, må du hente Docker-bilde-URI, treningsskript-URI og forhåndstrent modell-URI gjennom verktøyfunksjonene i SageMaker. Treningsskriptet URI inneholder all nødvendig kode for databehandling, lasting av den forhåndstrente modellen, modellopplæring og lagring av den trente modellen for slutning. Den forhåndstrente modellen URI inneholder den forhåndstrente modellarkitekturdefinisjonen og modellparametrene. Merk at Docker-bilde-URI og treningsskript-URI er de samme for alle TensorFlow-bildeklassifiseringsmodellene. Den forhåndstrente modellen URI er spesifikk for den aktuelle modellen. De forhåndstrente modell-tarballene er forhåndslastet ned fra TensorFlow Hub og lagret med passende modellsignatur i Amazon enkel lagringstjeneste (Amazon S3) bøtter, slik at treningsjobben kjører i nettverksisolasjon. 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 modellspesifikke treningsartefaktene kan du konstruere et objekt av 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,
)

Deretter, for å overføre læring på det tilpassede datasettet ditt, må du kanskje endre standardverdiene til treningshyperparametrene, som er oppført i Hyperparametere. Du kan hente en Python-ordbok med disse hyperparametrene med standardverdiene ved å ringe hyperparameters.retrieve_default, oppdater dem etter behov, og send dem deretter til Estimator-klassen. Merk at standardverdiene til noen av hyperparametrene er forskjellige for forskjellige modeller. For store modeller er standard batchstørrelse mindre og train_only_top_layer hyperparameter er satt til True. Hyperparameteren Train_only_top_layer definerer hvilke modellparametre som endres under finjusteringsprosessen. Hvis train_only_top_layer is True, parametre for klassifiseringslagene endres og resten av parametrene forblir konstante under finjusteringsprosessen. På den annen side, hvis train_only_top_layer is False, alle parametere til modellen er finjustert. 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 gir et standard opplæringsdatasett som er vert i S3-bøtter. Vi tilbyr tf_flowers datasett som standard datasett for finjustering av modellene. Datasettet består av bilder av fem typer blomster. Datasettet er lastet ned fra tensorflow under Apache 2.0-lisens.

# 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 slutt, for å lansere SageMaker-treningsjobben for finjustering av modellen, ring .fit på objektet for Estimator-klassen, mens du passerer S3-plasseringen til treningsdatasettet:

# 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 mer informasjon om hvordan du bruker den nye SageMaker TensorFlow bildeklassifiseringsalgoritmen for overføring av læring på et tilpasset datasett, distribuer den finjusterte modellen, kjør inferens på den distribuerte modellen og distribuer den forhåndstrente modellen som den er uten første finjustering på et tilpasset datasett, se følgende eksempelnotatbok: Introduksjon til SageMaker TensorFlow – Bildeklassifisering.

Input/output-grensesnitt for TensorFlow-bildeklassifiseringsalgoritmen

Du kan finjustere hver av de forhåndstrente modellene som er oppført i TensorFlow Hub-modeller til et gitt datasett som omfatter bilder som tilhører et hvilket som helst antall klasser. Målet er å minimere prediksjonsfeil på inndataene. Modellen som returneres ved finjustering kan distribueres videre for slutninger. Følgende er instruksjonene for hvordan treningsdataene skal formateres for input til modellen:

  • Input – En katalog med like mange underkataloger som antall klasser. Hver underkatalog skal ha bilder som tilhører den klassen i .jpg-, .jpeg- eller .png-format.
  • Produksjon – En finjustert modell som kan distribueres for inferens eller som kan trenes videre ved hjelp av inkrementell trening. En for- og etterbehandlingssignatur legges til den finjusterte modellen slik at den tar rå .jpg-bilde som input og returnerer klassesannsynligheter. En fil som kartlegger klasseindekser til klasseetiketter, lagres sammen med modellene.

Inndatakatalogen skal se ut som følgende eksempel hvis treningsdataene inneholder bilder fra to klasser: roses og dandelion. S3-banen skal se ut s3://bucket_name/input_directory/. Legg merke til etterfølgende / er nødvendig. Navnene på mappene og roses, dandelion, og .jpg-filnavnene kan være hva som helst. Etiketttilordningsfilen som er lagret sammen med den trente modellen på S3-bøtten, kartlegger mappenavnene roser og løvetann til indeksene i listen over klassesannsynligheter modellen gir ut. Kartleggingen følger alfabetisk rekkefølge av mappenavnene. I det følgende eksempelet tilsvarer indeks 0 i modellutdatalisten dandelion, og indeks 1 tilsvarer roses.

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

Inferens med TensorFlow-bildeklassifiseringsalgoritmen

De genererte modellene kan være vert for inferens og støtte kodede .jpg-, .jpeg- og .png-bildeformater som application/x-image innholdstype. Inndatabildet endres automatisk. Utdataene inneholder sannsynlighetsverdiene, klasseetikettene for alle klasser og den predikerte etiketten som tilsvarer klasseindeksen med høyest sannsynlighet, kodet i JSON-format. TensorFlow-bildeklassifiseringsmodellen behandler et enkelt bilde per forespørsel og sender bare ut é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 satt til application/json, da gir modellen bare ut sannsynligheter. For mer informasjon om trening og slutninger, se eksempelnotisboken Introduksjon til SageMaker TensorFlow – Bildeklassifisering.

Bruk SageMaker innebygde algoritmer gjennom JumpStart UI

Du kan også bruke SageMaker TensorFlow bildeklassifisering og hvilken som helst av de andre innebygde algoritmene med noen få klikk via JumpStart UI. JumpStart er en SageMaker-funksjon som lar deg trene og distribuere innebygde algoritmer og forhåndstrente modeller fra ulike ML-rammeverk og modellhuber gjennom et grafisk grensesnitt. Den lar deg også distribuere fullverdige ML-løsninger som setter sammen ML-modeller og forskjellige andre AWS-tjenester for å løse en målrettet brukssituasjon. Sjekk ut Kjør tekstklassifisering med Amazon SageMaker JumpStart ved å bruke TensorFlow Hub og Hugging Face-modeller for å finne ut hvordan du bruker JumpStart til å trene en algoritme eller forhåndstrent modell med noen få klikk.

konklusjonen

I dette innlegget kunngjorde vi lanseringen av SageMaker TensorFlow bildeklassifisering innebygd algoritme. Vi ga eksempelkode på hvordan du utfører overføringslæring på et tilpasset datasett ved å bruke en forhåndstrent modell fra TensorFlow Hub ved å bruke denne algoritmen. For mer informasjon, sjekk ut dokumentasjon og eksempel notisbok.


Om forfatterne

Overfør læring for TensorFlow bildeklassifiseringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Ashish Khetan er Senior Applied Scientist med Amazon SageMaker innebygde algoritmer og hjelper til med å utvikle maskinlæringsalgoritmer. Han fikk sin doktorgrad fra University of Illinois Urbana-Champaign. Han er en aktiv forsker innen maskinlæring og statistisk inferens, og har publisert mange artikler på NeurIPS, ICML, ICLR, JMLR, ACL og EMNLP-konferanser.

Overfør læring for TensorFlow bildeklassifiseringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Vivek Madan er en anvendt vitenskapsmann med Amazon SageMaker JumpStart-teamet. Han fikk sin doktorgrad fra University of Illinois Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker innen maskinlæring og algoritmedesign, og har publisert artikler på EMNLP-, ICLR-, COLT-, FOCS- og SODA-konferanser.

Overfør læring for TensorFlow bildeklassifiseringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.João Moura er en AI/ML-spesialistløsningsarkitekt hos Amazon Web Services. Han er mest fokusert på NLP-brukstilfeller og å hjelpe kunder med å optimalisere opplæring og implementering av dyplæringsmodeller. Han er også en aktiv talsmann for lavkode ML-løsninger og ML-spesialisert maskinvare.

Overfør læring for TensorFlow bildeklassifiseringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Raju Penmatcha er senior AI/ML spesialistløsningsarkitekt hos AWS. Han jobber med utdannings-, regjerings- og ideelle organisasjonskunder på maskinlærings- og kunstig intelligensrelaterte prosjekter, og hjelper dem med å bygge løsninger ved hjelp av AWS. Når han ikke hjelper kunder, liker han å reise til nye steder.

Tidstempel:

Mer fra AWS maskinlæring