研究人员继续为常见的机器学习 (ML) 任务开发新的模型架构。 其中一项任务是图像分类,其中图像被接受为输入,并且模型尝试使用对象标签输出将图像作为一个整体进行分类。 现在有许多模型可以执行此图像分类任务,机器学习从业者可能会问这样的问题:“我应该微调然后部署什么模型才能在我的数据集上实现最佳性能?” ML 研究人员可能会问这样的问题:“我如何在控制训练超参数和计算机规格(例如 GPU、CPU 和 RAM)的同时,生成我自己的多个模型架构与指定数据集的公平比较?” 前一个问题涉及跨模型架构的模型选择,而后一个问题涉及针对测试数据集对训练模型进行基准测试。
在这篇文章中,您将看到 TensorFlow 图像分类 的算法 亚马逊SageMaker JumpStart 可以简化解决这些问题所需的实现。 连同相应的实施细节 示例 Jupyter 笔记本,您将拥有可用于通过探索帕累托边界来执行模型选择的工具,在帕累托边界中,如果不恶化另一个指标(例如吞吐量),就不可能提高一个性能指标(例如准确性)。
解决方案概述
下图说明了在模型上微调的大量图像分类模型的模型选择权衡 加州理工学院 256 数据集,这是一组具有挑战性的 30,607 幅真实世界图像,跨越 256 个对象类别。 每个点代表一个模型,点的大小根据构成模型的参数数量进行缩放,并且这些点根据其模型架构进行颜色编码。 例如,浅绿色的点代表 EfficientNet 架构; 每个浅绿色点都是该架构的不同配置,具有独特的微调模型性能测量。 该图显示了模型选择的帕累托边界的存在,其中更高的准确度换取了更低的吞吐量。 最终,沿帕累托边界选择模型或一组帕累托有效解决方案取决于您的模型部署性能要求。
如果您观察感兴趣的测试精度和测试吞吐量边界,则在下表中提取了上图中的帕累托有效解决方案集。 对行进行排序,使得测试吞吐量增加而测试准确性降低。
型号名称 | 参数数量 | 测试精度 | 测试 Top 5 准确率 | 吞吐量(图像/秒) | 每个时期的持续时间 |
swin-large-patch4-window12-384 | 195.6M | 96.4% | 99.5% | 0.3 | 2278.6 |
swin-large-patch4-window7-224 | 195.4M | 96.1% | 99.5% | 1.1 | 698.0 |
effectivenet-v2-imagenet21k-ft1k-l | 118.1M | 95.1% | 99.2% | 4.5 | 1434.7 |
effectivenet-v2-imagenet21k-ft1k-m | 53.5M | 94.8% | 99.1% | 8.0 | 769.1 |
effectivenet-v2-imagenet21k-m | 53.5M | 93.1% | 98.5% | 8.0 | 765.1 |
高效网络-b5 | 29.0M | 90.8% | 98.1% | 9.1 | 668.6 |
effectivenet-v2-imagenet21k-ft1k-b1 | 7.3M | 89.7% | 97.3% | 14.6 | 54.3 |
effectivenet-v2-imagenet21k-ft1k-b0 | 6.2M | 89.0% | 97.0% | 20.5 | 38.3 |
effectivenet-v2-imagenet21k-b0 | 6.2M | 87.0% | 95.6% | 21.5 | 38.2 |
mobilenet-v3-large-100-224 | 4.6M | 84.9% | 95.4% | 27.4 | 28.8 |
mobilenet-v3-large-075-224 | 3.1M | 83.3% | 95.2% | 30.3 | 26.6 |
移动网络-v2-100-192 | 2.6M | 80.8% | 93.5% | 33.5 | 23.9 |
移动网络-v2-100-160 | 2.6M | 80.2% | 93.2% | 40.0 | 19.6 |
移动网络-v2-075-160 | 1.7M | 78.2% | 92.8% | 41.8 | 19.3 |
移动网络-v2-075-128 | 1.7M | 76.1% | 91.1% | 44.3 | 18.3 |
移动网络-v1-075-160 | 2.0M | 75.7% | 91.0% | 44.5 | 18.2 |
移动网络-v1-100-128 | 3.5M | 75.1% | 90.7% | 47.4 | 17.4 |
移动网络-v1-075-128 | 2.0M | 73.2% | 90.0% | 48.9 | 16.8 |
移动网络-v2-075-96 | 1.7M | 71.9% | 88.5% | 49.4 | 16.6 |
移动网络-v2-035-96 | 0.7M | 63.7% | 83.1% | 50.4 | 16.3 |
移动网络-v1-025-128 | 0.3M | 59.0% | 80.7% | 50.8 | 16.2 |
这篇文章详细介绍了如何实施大规模 亚马逊SageMaker 基准测试和模型选择任务。 首先,我们介绍 JumpStart 和内置的 TensorFlow 图像分类算法。 然后我们讨论高级实现注意事项,例如 JumpStart 超参数配置、从中提取指标 Amazon CloudWatch日志,并启动异步超参数调整作业。 最后,我们介绍了导致上表和图中帕累托有效解决方案的实现环境和参数化。
JumpStart TensorFlow 图像分类简介
JumpStart 提供跨流行 ML 任务的各种预训练模型的一键式微调和部署,以及一系列解决常见业务问题的端到端解决方案。 这些功能消除了 ML 过程每个步骤的繁重工作,从而更容易开发高质量模型并缩短部署时间。 这 JumpStart API 允许您以编程方式在您自己的数据集上部署和微调大量预训练模型。
JumpStart 模型中心提供对大量 TensorFlow 图像分类模型 能够对自定义数据集进行迁移学习和微调。 在撰写本文时,JumpStart 模型中心包含 135 个 TensorFlow 图像分类模型,涵盖来自 TensorFlow 中心, 包括残差网络 (RESNET), 移动网, 高效网, 盗梦空间, 神经结构搜索网络 (NAS网), 大转移 (少量), 移动窗口 (斯温) transformers, Image Transformers 中的 Class-Attention (蔡涛), 和数据有效的图像转换器 (德伊特).
每个模型架构都包含截然不同的内部结构。 例如,ResNet 模型利用跳跃连接来实现更深的网络,而基于 transformer 的模型使用自我注意机制来消除卷积运算的固有局部性,从而支持更全局的感受野。 除了这些不同结构提供的不同功能集外,每个模型架构还具有多种配置,可以调整该架构内的模型大小、形状和复杂性。 这导致 JumpStart 模型中心提供了数百个独特的图像分类模型。 结合包含许多 SageMaker 功能的内置迁移学习和推理脚本,JumpStart API 是 ML 从业者快速开始训练和部署模型的绝佳起点。
请参阅 Amazon SageMaker 中 TensorFlow 图像分类模型的迁移学习 和以下 示例笔记本 更深入地了解 SageMaker TensorFlow 图像分类,包括如何在预训练模型上运行推理以及如何在自定义数据集上微调预训练模型。
大型模型选择注意事项
模型选择是从一组候选模型中选择最佳模型的过程。 这个过程可以应用于具有不同参数权重的相同类型的模型和不同类型的模型。 跨相同类型模型的模型选择示例包括使用不同的超参数(例如,学习率)拟合相同模型和提前停止以防止模型权重过度拟合训练数据集。 跨不同类型模型的模型选择包括选择最佳模型架构(例如,Swin 与 MobileNet)和在单个模型架构中选择最佳模型配置(例如, mobilenet-v1-025-128
与 mobilenet-v3-large-100-224
).
本节概述的注意事项可在验证数据集上启用所有这些模型选择过程。
选择超参数配置
JumpStart 中的 TensorFlow 图像分类有大量可用 超参数 可以为所有模型架构统一调整迁移学习脚本行为。 这些超参数与数据增强和预处理、优化器规范、过度拟合控制和可训练层指标有关。 我们鼓励您根据应用程序的需要调整这些超参数的默认值:
对于此分析和相关的笔记本,所有超参数都设置为默认值,但学习率、时期数和提前停止规范除外。 学习率调整为 分类参数 由 SageMaker自动模型调整 工作。 因为每个模型都有唯一的默认超参数值,所以可能学习率的离散列表包括默认学习率以及默认学习率的五分之一。 这将为单个超参数调整作业启动两个训练作业,并选择在验证数据集上报告性能最佳的训练作业。 因为 epochs 的数量设置为 10,大于默认的超参数设置,所以选择的最佳训练作业并不总是对应于默认的学习率。 最后,使用一个早期停止标准,耐心地使用三个时期,或者在没有改进的情况下继续训练的时期数。
一个特别重要的默认超参数设置是 train_only_on_top_layer
,其中,如果设置为 True
,模型的特征提取层未在提供的训练数据集上进行微调。 优化器将仅在输出维数等于数据集中类标签数的顶部全连接分类层中训练参数。 默认情况下,此超参数设置为 True
,这是针对小型数据集的迁移学习的设置。 您可能有一个自定义数据集,其中从 ImageNet 数据集的预训练中提取的特征是不够的。 在这些情况下,您应该设置 train_only_on_top_layer
至 False
. 虽然此设置会增加训练时间,但您会为您感兴趣的问题提取更有意义的特征,从而提高准确性。
从 CloudWatch Logs 中提取指标
JumpStart TensorFlow 图像分类算法在训练期间可靠地记录了 SageMaker 可以访问的各种指标 Estimator
和 HyperparameterTuner 对象。 SageMaker 的构造函数 Estimator
有一个 metric_definitions
关键字参数,可用于通过提供具有两个键的字典列表来评估训练作业:度量名称的名称,以及 Regex
对于用于从日志中提取指标的正则表达式。 伴随的 笔记本 显示了实现细节。 下表列出了所有 JumpStart TensorFlow 图像分类模型的可用指标和关联的正则表达式。
指标名称 | 正则表达式 |
参数数量 | “- 参数个数:([0-9\.]+)” |
可训练参数的数量 | “- 可训练参数的数量:([0-9\.]+)” |
不可训练参数的数量 | “- 不可训练参数的数量:([0-9\.]+)” |
训练数据集指标 | f”- {公制}: ([0-9\.]+)” |
验证数据集指标 | f”- val_{metric}: ([0-9\.]+)” |
测试数据集指标 | f”- 测试 {metric}: ([0-9\.]+)” |
列车时长 | “- 总训练时间:([0-9\.]+)” |
每个时期的火车持续时间 | “- 每个时期的平均训练持续时间:([0-9\.]+)” |
测试评估延迟 | “- 测试评估延迟:([0-9\.]+)” |
每个样本的测试延迟 | “- 每个样本的平均测试延迟:([0-9\.]+)” |
测试吞吐量 | “- 平均测试吞吐量:([0-9\.]+)” |
内置的迁移学习脚本在这些定义中提供了各种训练、验证和测试数据集指标,如 f 字符串替换值所示。 可用的确切指标因所执行的分类类型而异。 所有编译模型都有 loss
度量,它由二元或分类分类问题的交叉熵损失表示。 前者在只有一个类标签时使用; 如果有两个或多个类标签,则使用后者。 如果只有一个类标签,则通过上表中的 f 字符串正则表达式计算、记录和提取以下指标:真阳性数 (true_pos
), 误报数 (false_pos
), 真阴性数 (true_neg
), 漏报数 (false_neg
), precision
, recall
, 接受者操作特征 (ROC) 曲线下的面积 (auc
), 以及精确召回 (PR) 曲线下的面积 (prc
). 类似地,如果有六个或更多类别标签,则前 5 个准确度指标(top_5_accuracy
) 也可以通过前面的正则表达式进行计算、记录和提取。
在训练期间,指标指定给 SageMaker Estimator
被发送到 CloudWatch Logs。 训练完成后,您可以调用 SageMaker 描述训练作业 API 并检查 FinalMetricDataList
JSON 响应中的键:
此 API 只需要向查询提供作业名称,因此,一旦完成,只要培训作业名称被适当记录并可恢复,就可以在未来的分析中获得指标。 对于此模型选择任务,存储超参数调整作业名称,随后的分析重新附加一个 HyperparameterTuner
给定调优作业名称的对象,从附加的超参数调谐器中提取最佳训练作业名称,然后调用 DescribeTrainingJob
API 如前所述,用于获取与最佳训练作业相关的指标。
启动异步超参数调整作业
参考相应的 笔记本 有关异步启动超参数调整作业的实现细节,它使用 Python 标准库的 并发期货 模块,用于异步运行可调用对象的高级接口。 此解决方案中实施了几个与 SageMaker 相关的注意事项:
- 每个 AWS 账户都隶属于 SageMaker 服务配额. 您应该查看当前限制以充分利用您的资源,并可能根据需要请求增加资源限制。
- 频繁调用 API 以创建多个同步超参数调整作业可能 超过 Python SDK 速率并抛出节流异常. 解决此问题的方法是创建一个具有自定义重试配置的 SageMaker Boto3 客户端。
- 如果您的脚本遇到错误或脚本在完成之前停止,会发生什么情况? 对于如此大的模型选择或基准研究,您可以记录调整作业名称并提供便利功能 重新附加超参数调整作业 已经存在:
分析细节和讨论
这篇文章中的分析执行迁移学习 模型 ID 在 Caltech-256 数据集上的 JumpStart TensorFlow 图像分类算法中。 所有训练作业均在 SageMaker 训练实例 ml.g4dn.xlarge 上执行,该实例包含单个 NVIDIA T4 GPU。
测试数据集在训练结束时在训练实例上进行评估。 模型选择在测试数据集评估之前执行,以将模型权重设置为具有最佳验证集性能的时期。 测试吞吐量未优化:数据集批量大小设置为默认训练超参数批量大小,未调整以最大化 GPU 内存使用; 报告的测试吞吐量包括数据加载时间,因为数据集没有预先缓存; 并且未使用跨多个 GPU 的分布式推理。 由于这些原因,此吞吐量是一个很好的相对度量,但实际吞吐量在很大程度上取决于训练模型的推理端点部署配置。
尽管 JumpStart 模型中心包含许多图像分类架构类型,但此 pareto 前沿由选定的 Swin、EfficientNet 和 MobileNet 模型主导。 Swin 模型更大,相对更准确,而 MobileNet 模型更小,相对不太准确,适用于移动设备的资源限制。 重要的是要注意,这个边界取决于多种因素,包括使用的确切数据集和选择的微调超参数。 您可能会发现您的自定义数据集产生了一组不同的帕累托有效解决方案,并且您可能希望使用不同的超参数进行更长的训练时间,例如更多的数据扩充或微调,而不仅仅是模型的顶层分类层。
结论
在本文中,我们展示了如何使用 JumpStart 模型中心运行大规模模型选择或基准测试任务。 该解决方案可以帮助您选择最适合您需求的模型。 我们鼓励您尝试和探索这个 方案, 在你自己的数据集上。
参考资料
更多信息可在以下资源中获得:
关于作者
凯尔乌尔里希博士 是一名应用科学家 Amazon SageMaker 内置算法 团队。 他的研究兴趣包括可扩展机器学习算法、计算机视觉、时间序列、贝叶斯非参数和高斯过程。 他在杜克大学获得博士学位,并在 NeurIPS、Cell 和 Neuron 上发表了论文。
Ashish Khetan 博士 是一名高级应用科学家 Amazon SageMaker 内置算法 并帮助开发机器学习算法。 他在伊利诺伊大学厄巴纳香槟分校获得博士学位。 他是机器学习和统计推断领域的活跃研究员,在 NeurIPS、ICML、ICLR、JMLR、ACL 和 EMNLP 会议上发表了多篇论文。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- 柏拉图区块链。 Web3 元宇宙智能。 知识放大。 访问这里。
- Sumber: https://aws.amazon.com/blogs/machine-learning/image-classification-model-selection-using-amazon-sagemaker-jumpstart/
- 10
- 100
- 7
- 9
- a
- 关于
- ACCESS
- 无障碍
- 账号管理
- 精准的
- 横过
- 要积极。
- 增加
- 地址
- 地址
- 调整
- 附属
- 驳
- 算法
- 算法
- 所有类型
- 已经
- 尽管
- 时刻
- Amazon
- 亚马逊SageMaker
- 亚马逊SageMaker JumpStart
- 检测值
- 分析
- 和
- 另一个
- API
- 应用领域
- 应用的
- 适当
- 架构
- 国家 / 地区
- 论点
- 相关
- 连接
- 尝试
- 自动表
- 可使用
- AWS
- 基于
- 贝叶斯
- 因为
- before
- 作为
- 标杆
- 最佳
- 大
- 内建的
- 商业
- 呼叫
- 候选人
- 例
- 类别
- 挑战
- 特点
- 程
- 分类
- 分类
- 客户
- 结合
- 相当常见
- 对照
- 完成
- 完成
- 完成
- 复杂
- 一台
- 计算机视觉
- 关注
- 会议
- 配置
- 已联繫
- 连接
- 注意事项
- 约束
- 包含
- 继续
- 控制
- 控制
- 方便
- 相应
- 外壳
- 创建信息图
- 电流
- 曲线
- 习俗
- data
- 数据集
- 更深
- 默认
- 依靠
- 部署
- 部署
- 部署
- 深度
- 描述
- 描述
- 详情
- 开发
- 设备
- 不同
- 讨论
- 分布
- 不同
- 不会
- 公爵
- 杜克大学
- ,我们将参加
- 每
- 此前
- 早
- 更容易
- 高效
- 或
- 消除
- enable
- 鼓励
- 鼓励
- 端至端
- 端点
- 环境
- 时代
- 时代
- 错误
- 评估
- 评估
- 评估
- 例子
- 例子
- 除
- 探索
- 探索
- 表达式
- 提取
- 因素
- 公平
- 赞成
- 专栏
- 特征
- 字段
- 数字
- 终于
- 找到最适合您的地方
- 姓氏:
- 配件
- 以下
- 前
- 止
- 边疆
- 前沿
- 充分
- 功能
- 未来
- 期货
- 生成
- 得到
- 特定
- 全球
- 非常好
- GPU
- 图形处理器
- 大
- 更大的
- 绿色
- 发生
- 严重
- 帮助
- 帮助
- 高水平
- 高品质
- 更高
- 创新中心
- How To
- HTML
- HTTPS
- 中心
- 数百
- 超参数调整
- 伊利诺伊州
- 图片
- 图像分类
- 图片
- 实施
- 履行
- 实施
- 重要性
- 重要
- 改进
- 改善
- in
- 包括
- 包括
- 包含
- 增加
- 增加
- 增加
- 指标
- 信息
- 输入
- 例
- 兴趣
- 利益
- 接口
- 内部
- 固有
- 介绍
- IT
- 工作
- 工作机会
- JSON
- 键
- 键
- 标签
- 标签
- 大
- 大规模
- 大
- 潜伏
- 启动
- 发射
- 层
- 层
- 领导
- 学习用品
- 学习
- 翻新
- 光
- 极限
- 范围
- 清单
- 书单
- 装载
- 长
- 不再
- 离
- 机
- 机器学习
- 制作
- 许多
- 生产力
- 有意义的
- 测量
- 内存
- 公
- 指标
- ML
- 联络号码
- 移动设备
- 模型
- 模型
- 模块
- 更多
- 多
- 姓名
- 名称
- 必要
- 需要
- 网络
- 全新
- 笔记本
- 数
- Nvidia公司
- 对象
- 对象
- 观察
- 获得
- 获得
- 一
- 操作
- 运营
- 优化
- 概述
- 己
- 文件
- 参数
- 参数
- 特别
- 忍耐
- 演出
- 性能
- 施行
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 点
- 点
- 热门
- 可能
- 帖子
- 可能
- pr
- 防止
- 先
- 市场问题
- 问题
- 过程
- 过程
- 提供
- 提供
- 提供
- 优
- 出版
- 蟒蛇
- 题
- 有疑问吗?
- 很快
- 内存
- 率
- 价格表
- 真实的世界
- 原因
- 减少
- 定期
- 相对
- 去掉
- 报道
- 代表
- 代表
- 代表
- 请求
- 必须
- 岗位要求
- 需要
- 研究
- 研究员
- 分辨率
- 资源
- 资源
- 响应
- 成果
- 运行
- 运行
- sagemaker
- 同
- 可扩展性
- 科学家
- 脚本
- SDK
- 搜索
- 部分
- 选
- 选择
- 选择
- 前辈
- 系列
- 服务
- 会议
- 集
- 套数
- 设置
- 几个
- 形状
- 应该
- 作品
- 同样
- 简化
- 单
- SIX
- 尺寸
- 尺寸
- 小
- 小
- So
- 方案,
- 解决方案
- 解决
- 规范
- 规格
- 指定
- 标准
- 开始
- 统计
- 步
- 停止
- 停车
- 存储
- 学习
- 随后
- 这样
- 足够
- 合适的
- 表
- 针对
- 任务
- 任务
- 团队
- tensorflow
- test
- 其
- 从而
- 三
- 吞吐量
- 次
- 时间序列
- 时
- 至
- 今晚
- 一起
- 工具
- 最佳
- 前5名
- 合计
- 培训
- 熟练
- 产品培训
- 转让
- 变形金刚
- true
- 类型
- 最终
- 下
- 独特
- 大学
- 用法
- 使用
- 利用
- 利用
- 验证
- 价值观
- 各种
- 广阔
- 通过
- 查看
- 愿景
- 这
- 而
- 全
- 宽
- 将
- 中
- 也完全不需要
- 将
- 写作
- 完全
- 您一站式解决方案
- 和风网