Amazon SageMaker 中 TensorFlow 图像分类模型的迁移学习

亚马逊SageMaker 提供了一套 内置算法, 预训练模型预建的解决方案模板 帮助数据科学家和机器学习 (ML) 从业者快速开始训练和部署 ML 模型。 您可以将这些算法和模型用于有监督和无监督学习。 它们可以处理各种类型的输入数据,包括表格、图像和文本。

从今天开始,SageMaker 为图像分类提供了一种新的内置算法: 图像分类 - TensorFlow. 它是一种监督学习算法,支持对许多可用的预训练模型进行迁移学习 TensorFlow 中心. 它将图像作为输入并输出每个类标签的概率。 即使没有大量训练图像,您也可以使用迁移学习微调这些预训练模型。 它可以通过 SageMaker 获得 内置算法 以及通过 SageMaker JumpStart 用户界面亚马逊SageMaker Studio. 有关更多信息,请参阅其文档 图像分类 - TensorFlow 和示例笔记本 SageMaker TensorFlow 简介 – 图像分类.

在 SageMaker 中使用 TensorFlow 进行图像分类可在 TensorFlow Hub 中提供的许多预训练模型上提供迁移学习。 根据训练数据中类标签的数量,在预训练的 TensorFlow Hub 模型上附加一个分类层。 分类层由一个 dropout 层和一个密集层组成,后者是一个具有 2-norm 正则化器的全连接层,该层用随机权重初始化。 模型训练具有用于 dropout 层的 dropout 率的超参数和用于密集层的 L2 正则化因子。 然后可以在新的训练数据上对整个网络(包括预训练模型)或仅顶层分类层进行微调。 在这种迁移学习模式下,即使使用较小的数据集也可以实现训练。

如何使用新的 TensorFlow 图像分类算法

本节介绍如何将 TensorFlow 图像分类算法与 SageMaker Python 开发工具包. 有关如何在 Studio UI 中使用它的信息,请参阅 SageMaker 快速启动.

该算法支持对中列出的预训练模型进行迁移学习 TensorFlow Hub 模型. 每个模型都由唯一的标识 model_id. 以下代码显示了如何微调 MobileNet V2 1.00 224 标识的 model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 在自定义训练数据集上。 对于每个 model_id,为了通过 估计 SageMaker Python SDK 类,您需要通过 SageMaker 中提供的实用程序函数获取 Docker 映像 URI、训练脚本 URI 和预训练模型 URI。 训练脚本 URI 包含数据处理、加载预训练模型、模型训练以及保存训练模型以进行推理的所有必要代码。 预训练模型 URI 包含预训练模型架构定义和模型参数。 请注意,所有 TensorFlow 图像分类模型的 Docker 图像 URI 和训练脚本 URI 都是相同的。 预训练模型 URI 特定于特定模型。 预训练模型压缩包已从 TensorFlow Hub 预下载,并与适当的模型签名一起保存在 亚马逊简单存储服务 (Amazon S3) 存储桶,以便训练作业在网络隔离中运行。 请参阅以下代码:

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"

使用这些特定于模型的训练工件,您可以构建 估计 类:

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

接下来,对于自定义数据集的迁移学习,您可能需要更改训练超参数的默认值,这些值在 超参数. 您可以通过调用获取这些超参数及其默认值的 Python 字典 hyperparameters.retrieve_default,根据需要更新它们,然后将它们传递给 Estimator 类。 请注意,某些超参数的默认值对于不同的模型是不同的。 对于大型模型,默认的批大小更小,并且 train_only_top_layer 超参数设置为 True. 超参数 Train_only_top_layer 定义在微调过程中哪些模型参数会发生变化。 如果 train_only_top_layer is True,分类层的参数在微调过程中发生变化,其余参数保持不变。 另一方面,如果 train_only_top_layer is False,模型的所有参数都经过微调。 请参阅以下代码:

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"

以下代码提供了托管在 S3 存储桶中的默认训练数据集。 我们提供 tf_flowers dataset 作为微调模型的默认数据集。 该数据集包含五种花卉的图像。 数据集已从 TensorFlow 在下面 Apache 2.0 许可证.

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

最后,要启动 SageMaker 训练作业以微调模型,请调用 .fit 在 Estimator 类的对象上,同时传递训练数据集的 S3 位置:

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

有关如何使用新的 SageMaker TensorFlow 图像分类算法在自定义数据集上进行迁移学习的更多信息,部署微调模型,在已部署模型上运行推理,并按原样部署预训练模型,无需先进行微调在自定义数据集上,请参阅以下示例笔记本: SageMaker TensorFlow 简介 – 图像分类.

TensorFlow 图像分类算法的输入/输出接口

您可以微调列出的每个预训练模型 TensorFlow Hub 模型 到包含属于任意数量类的图像的任何给定数据集。 目标是最小化输入数据的预测误差。 微调返回的模型可以进一步部署用于推理。 以下是有关如何格式化训练数据以输入模型的说明:

  • 输入 – 具有与类数一样多的子目录的目录。 每个子目录都应包含属于该类的 .jpg、.jpeg 或 .png 格式的图像。
  • 输出 – 可以部署用于推理或可以使用增量训练进一步训练的微调模型。 将预处理和后处理签名添加到微调模型中,使其将原始 .jpg 图像作为输入并返回类概率。 将类索引映射到类标签的文件与模型一起保存。

如果训练数据包含来自两个类的图像,则输入目录应类似于以下示例: rosesdandelion. S3 路径应如下所示 s3://bucket_name/input_directory/. 注意尾随 / 是必须的。 文件夹的名称和 roses, dandelion, .jpg 文件名可以是任何东西。 与 S3 存储桶上的训练模型一起保存的标签映射文件将文件夹名称 roses 和 dandelion 映射到模型输出的类概率列表中的索引。 映射遵循文件夹名称的字母顺序。 在以下示例中,模型输出列表中的索引 0 对应于 dandelion, 并且索引 1 对应于 roses.

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

使用 TensorFlow 图像分类算法进行推理

生成的模型可以托管用于推理,并支持编码的 .jpg、.jpeg 和 .png 图像格式作为 application/x-image 内容类型。 输入图像会自动调整大小。 输出包含概率值、所有类的类标签以及概率最高的类索引对应的预测标签,以 JSON 格式编码。 TensorFlow 图像分类模型每次请求处理一张图像,并在 JSON 中仅输出一行。 以下是 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 被设置为 application/json,那么模型只输出概率。 有关训练和推理的更多详细信息,请参阅示例笔记本 SageMaker TensorFlow 简介 – 图像分类.

通过 JumpStart UI 使用 SageMaker 内置算法

您还可以通过 JumpStart UI 单击几下,使用 SageMaker TensorFlow 图像分类和任何其他内置算法。 JumpStart 是 SageMaker 的一项功能,可让您通过图形界面从各种 ML 框架和模型中心训练和部署内置算法和预训练模型。 它还允许您部署成熟的 ML 解决方案,将 ML 模型和各种其他 AWS 服务串联在一起,以解决目标用例。 查看 使用 TensorFlow Hub 和 Hugging Face 模型通过 Amazon SageMaker JumpStart 运行文本分类 了解如何使用 JumpStart 通过几次点击来训练算法或预训练模型。

结论

在这篇文章中,我们宣布推出 SageMaker TensorFlow 图像分类内置算法。 我们提供了有关如何使用 TensorFlow Hub 中使用此算法的预训练模型对自定义数据集进行迁移学习的示例代码。 欲了解更多信息,请查看 文件示例笔记本.


关于作者

Amazon SageMaker PlatoBlockchain 数据智能中的 TensorFlow 图像分类模型的迁移学习。垂直搜索。人工智能。Ashish Khetan 博士 是一名高级应用科学家 Amazon SageMaker 内置算法 并帮助开发机器学习算法。 他在伊利诺伊大学厄巴纳-香槟分校获得博士学位。 他是机器学习和统计推理领域的活跃研究员,在 NeurIPS、ICML、ICLR、JMLR、ACL 和 EMNLP 会议上发表了多篇论文。

Amazon SageMaker PlatoBlockchain 数据智能中的 TensorFlow 图像分类模型的迁移学习。垂直搜索。人工智能。Vivek Madan 博士 是一名应用科学家 Amazon SageMaker JumpStart 团队. 他在伊利诺伊大学厄巴纳-香槟分校获得博士学位,并且是佐治亚理工学院的博士后研究员。 他是机器学习和算法设计方面的活跃研究员,并在 EMNLP、ICLR、COLT、FOCS 和 SODA 会议上发表过论文。

Amazon SageMaker PlatoBlockchain 数据智能中的 TensorFlow 图像分类模型的迁移学习。垂直搜索。人工智能。若昂·莫拉 是 Amazon Web Services 的 AI/ML 专家解决方案架构师。 他主要专注于 NLP 用例并帮助客户优化深度学习模型训练和部署。 他还是低代码 ML 解决方案和 ML 专用硬件的积极支持者。

Amazon SageMaker PlatoBlockchain 数据智能中的 TensorFlow 图像分类模型的迁移学习。垂直搜索。人工智能。拉朱(Raju Penmatcha) 是 AWS 的高级 AI/ML 专家解决方案架构师。 他与教育、政府和非营利客户合作开展机器学习和人工智能相关项目,帮助他们使用 AWS 构建解决方案。 在不帮助客户的时候,他喜欢去新的地方旅行。

时间戳记:

更多来自 AWS机器学习