Överför lärande för TensorFlow-bildklassificeringsmodeller i Amazon SageMaker

Amazon SageMaker ger en svit av inbyggda algoritmer, förutbildade modelleroch färdigbyggda lösningsmallar för att hjälpa datavetare och utövare av maskininlärning (ML) komma igång med utbildning och implementering av ML-modeller snabbt. Du kan använda dessa algoritmer och modeller för både övervakat och oövervakat lärande. De kan bearbeta olika typer av indata, inklusive tabell, bild och text.

Från och med idag tillhandahåller SageMaker en ny inbyggd algoritm för bildklassificering: Bildklassificering – TensorFlow. Det är en övervakad inlärningsalgoritm som stöder överföringsinlärning för många förtränade modeller tillgängliga i TensorFlow Hub. Den tar en bild som indata och matar ut sannolikhet för var och en av klassetiketterna. Du kan finjustera dessa förtränade modeller med hjälp av överföringsinlärning även när ett stort antal träningsbilder inte är tillgängliga. Det är tillgängligt via SageMaker inbyggda algoritmer såväl som genom SageMaker JumpStart UI inuti Amazon SageMaker Studio. För mer information, se dess dokumentation Bildklassificering – TensorFlow och exempelanteckningsboken Introduktion till SageMaker TensorFlow – Bildklassificering.

Bildklassificering med TensorFlow i SageMaker ger överföringsinlärning på många förtränade modeller tillgängliga i TensorFlow Hub. Beroende på antalet klassetiketter i träningsdatan är ett klassificeringsskikt kopplat till den förtränade TensorFlow Hub-modellen. Klassificeringsskiktet består av ett dropout-skikt och ett tätt skikt, som är ett helt sammankopplat skikt med 2-norms regularizer som initieras med slumpmässiga vikter. Modellträningen har hyperparametrar för bortfallshastigheten för bortfallslagret och L2-regulariseringsfaktorn för det täta lagret. Då kan antingen hela nätverket, inklusive den förtränade modellen, eller bara det översta klassificeringsskiktet finjusteras på den nya träningsdatan. I detta överföringsinlärningsläge kan du uppnå träning även med en mindre datauppsättning.

Hur man använder den nya TensorFlow-bildklassificeringsalgoritmen

Det här avsnittet beskriver hur du använder TensorFlow-bildklassificeringsalgoritmen med SageMaker Python SDK. För information om hur du använder det från Studio UI, se SageMaker JumpStart.

Algoritmen stöder överföringsinlärning för de förtränade modellerna som anges i TensorFlow Hub-modeller. Varje modell identifieras av en unik model_id. Följande kod visar hur du finjusterar MobileNet V2 1.00 224 identifierad av model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 på en anpassad träningsdatauppsättning. För varje model_id, för att lansera ett SageMaker-utbildningsjobb genom Uppskattare klass av SageMaker Python SDK måste du hämta Docker-bild-URI, träningsskript-URI och förtränad modell-URI genom verktygsfunktionerna i SageMaker. Utbildningsskriptets URI innehåller all nödvändig kod för databehandling, laddning av den förtränade modellen, modellträning och lagring av den tränade modellen för slutledning. Den förtränade modellens URI innehåller den förtränade modellarkitekturens definition och modellparametrarna. Observera att Docker-bild-URI och träningsskript-URI är samma för alla TensorFlow-bildklassificeringsmodeller. Den förtränade modellens URI är specifik för den specifika modellen. De förtränade modellens tarballs har förnedladdats från TensorFlow Hub och sparats med lämplig modellsignatur i Amazon enkel lagringstjänst (Amazon S3) hinkar, så att träningsjobbet körs i nätverksisolering. Se följande kod:

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 dessa modellspecifika träningsartefakter kan du konstruera ett objekt av Uppskattare klass:

# 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,
)

Därefter, för att överföra inlärning på din anpassade datauppsättning, kan du behöva ändra standardvärdena för träningshyperparametrarna, som listas i Hyperparametrar. Du kan hämta en Python-ordlista med dessa hyperparametrar med deras standardvärden genom att anropa hyperparameters.retrieve_default, uppdatera dem vid behov och skicka dem sedan till klassen Estimator. Observera att standardvärdena för vissa av hyperparametrarna är olika för olika modeller. För stora modeller är standardbatchstorleken mindre och train_only_top_layer hyperparameter är inställd på True. Hyperparametern Train_only_top_layer definierar vilka modellparametrar som ändras under finjusteringsprocessen. Om train_only_top_layer is True, ändras parametrarna för klassificeringsskikten och resten av parametrarna förblir konstanta under finjusteringsprocessen. Å andra sidan, om train_only_top_layer is False, alla parametrar i modellen är finjusterade. Se följande kod:

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öljande kod tillhandahåller en standardutbildningsdatauppsättning som är värd i S3-hinkar. Vi tillhandahåller tf_flowers dataset som en standarddatauppsättning för finjustering av modellerna. Datauppsättningen består av bilder av fem typer av blommor. Datauppsättningen har laddats ner från 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}"

Slutligen, för att lansera SageMaker-utbildningsjobbet för att finjustera modellen, ring .fit på objektet för Estimator-klassen, samtidigt som du passerar S3-platsen för träningsdatauppsättningen:

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

För mer information om hur du använder den nya SageMaker TensorFlow bildklassificeringsalgoritmen för överföringsinlärning på en anpassad datauppsättning, distribuera den finjusterade modellen, kör slutledning på den distribuerade modellen och distribuera den förtränade modellen som den är utan att först finjustera på en anpassad datauppsättning, se följande exempel på anteckningsboken: Introduktion till SageMaker TensorFlow – Bildklassificering.

Input/output-gränssnitt för TensorFlow-bildklassificeringsalgoritmen

Du kan finjustera var och en av de förtränade modellerna som listas i TensorFlow Hub-modeller till varje given datauppsättning som består av bilder som tillhör valfritt antal klasser. Målet är att minimera prediktionsfel på indata. Modellen som returneras genom finjustering kan vidareutvecklas för slutledning. Följande är instruktionerna för hur träningsdata ska formateras för inmatning till modellen:

  • Ingång – En katalog med lika många underkataloger som antalet klasser. Varje underkatalog ska ha bilder som tillhör den klassen i .jpg-, .jpeg- eller .png-format.
  • Produktion – En finjusterad modell som kan användas för slutledning eller kan vidareutbildas med hjälp av inkrementell träning. En förbearbetnings- och efterbearbetningssignatur läggs till den finjusterade modellen så att den tar rå .jpg-bild som indata och returnerar klasssannolikheter. En fil som mappar klassindex till klassetiketter sparas tillsammans med modellerna.

Inmatningskatalogen bör se ut som följande exempel om träningsdata innehåller bilder från två klasser: roses och dandelion. S3-banan ska se ut s3://bucket_name/input_directory/. Notera släpningen / krävs. Namnen på mapparna och roses, dandelion, och .jpg-filnamnen kan vara vad som helst. Etikettmappningsfilen som sparas tillsammans med den tränade modellen på S3-skopan mappar mappnamnen rosor och maskros till indexen i listan över klasssannolikheter som modellen matar ut. Mappningen följer alfabetisk ordning av mappnamnen. I följande exempel motsvarar index 0 i modellutdatalistan dandelion, och index 1 motsvarar roses.

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

Slutledning med TensorFlow-bildklassificeringsalgoritmen

De genererade modellerna kan vara värd för slutledning och stödja kodade .jpg-, .jpeg- och .png-bildformat som application/x-image innehållstyp. Storleken på den ingående bilden ändras automatiskt. Utdatan innehåller sannolikhetsvärdena, klassetiketterna för alla klasser och den förutsagda etiketten som motsvarar klassindexet med högst sannolikhet, kodad i JSON-format. TensorFlow-bildklassificeringsmodellen bearbetar en enda bild per begäran och matar bara ut en rad i JSON. Följande är ett exempel på ett 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 är inställd på application/json, då matar modellen bara ut sannolikheter. För mer information om träning och slutledning, se exempelanteckningsboken Introduktion till SageMaker TensorFlow – Bildklassificering.

Använd SageMaker inbyggda algoritmer genom JumpStart UI

Du kan också använda SageMaker TensorFlow bildklassificering och någon av de andra inbyggda algoritmerna med några få klick via JumpStart UI. JumpStart är en SageMaker-funktion som låter dig träna och distribuera inbyggda algoritmer och förtränade modeller från olika ML-ramverk och modellhubbar genom ett grafiskt gränssnitt. Det låter dig också distribuera fullfjädrade ML-lösningar som sammanfogar ML-modeller och olika andra AWS-tjänster för att lösa ett målinriktat användningsfall. Kolla upp Kör textklassificering med Amazon SageMaker JumpStart med TensorFlow Hub och Hugging Face-modeller för att ta reda på hur man använder JumpStart för att träna en algoritm eller förtränad modell med några få klick.

Slutsats

I det här inlägget tillkännagav vi lanseringen av SageMaker TensorFlow-bildklassificeringens inbyggda algoritm. Vi gav exempelkod om hur man gör överföringsinlärning på en anpassad datauppsättning med hjälp av en förtränad modell från TensorFlow Hub med denna algoritm. För mer information, kolla in dokumentation och exempel anteckningsbok.


Om författarna

Överför lärande för TensorFlow-bildklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Dr Ashish Khetan är senior tillämpad forskare med Amazon SageMaker inbyggda algoritmer och hjälper till att utveckla maskininlärningsalgoritmer. Han tog sin doktorsexamen från University of Illinois Urbana-Champaign. Han är en aktiv forskare inom maskininlärning och statistisk slutledning och har publicerat många artiklar i NeurIPS, ICML, ICLR, JMLR, ACL och EMNLP-konferenser.

Överför lärande för TensorFlow-bildklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Dr. Vivek Madan är en tillämpad vetenskapsman med Amazon SageMaker JumpStart-team. Han tog sin doktorsexamen från University of Illinois Urbana-Champaign och var postdoktor vid Georgia Tech. Han är en aktiv forskare inom maskininlärning och algoritmdesign och har publicerat artiklar i EMNLP, ICLR, COLT, FOCS och SODA-konferenser.

Överför lärande för TensorFlow-bildklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.João Moura är en AI/ML Specialist Solutions Architect på Amazon Web Services. Han är mestadels fokuserad på NLP-användningsfall och att hjälpa kunder att optimera utbildning och implementering av djupinlärningsmodeller. Han är också en aktiv förespråkare för ML-lösningar med låg kod och ML-specialiserad hårdvara.

Överför lärande för TensorFlow-bildklassificeringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Raju Penmatcha är Senior AI / ML Specialist Solutions Architect på AWS. Han arbetar med utbildning, myndigheter och ideella kunder på maskininlärning och artificiell intelligensrelaterade projekt och hjälper dem att bygga lösningar med hjälp av AWS. När han inte hjälper kunder gillar han att resa till nya platser.

Tidsstämpel:

Mer från AWS maskininlärning