https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUH4pcpG4bc3D8_mZGs5GXUPpfVJFTE6EpQKcH4SdMCMnjxRnT9plRX6Ku_4-R5orhMgzwA0fAPnHTdyjsl-x3AvdSHjx8t3U5FBZIh0SHltEWb9SY2sCZe93vcRMhV55h5J-PbhU3z98/s1600/fig1.png
作者:Clemens Mewald,TFX 产品经理
今天,我们发布了
TensorFlow 模型分析 (TFMA),这是一个开源库,它结合了
TensorFlow 和
Apache Beam 的强大功能来计算和可视化评估指标。在部署任何机器学习 (ML) 模型之前,ML 开发人员需要对其进行评估,以确保它满足特定的质量阈值,并在所有相关的数据切片上按预期运行。此外,这种计算应该能够无缝地扩展,从适合内存的小型数据集扩展到大型的分布式计算。在本篇文章中,我们将概述 TFMA 以及开发人员如何使用它来解决上述所有挑战。
并非所有评估指标都一样……
在我们深入了解 TFMA 的工作原理之前,我们将首先了解它与 TensorBoard 中已经可以计算和观察到的评估指标有何不同。
训练期间与训练后
在 TensorBoard 中可视化的 TensorFlow 指标是在训练运行期间计算的,并显示了指标如何随着全局训练步骤(跨所有训练工作器)而变化。这可以回答诸如“我的模型是否正在收敛?”之类的问题。
TFMA 会导出一个包含评估图和用于计算指标的附加元数据的 SavedModel,这意味着它使用导出的模型一次计算指标。在最终模型上评估性能非常重要,因为这是将要部署的模型。
|
图 1:TensorBoard 可视化从检查点计算的流式指标。TFMA 使用导出的 SavedModel 计算和可视化指标。 |
单个模型与多个模型随时间变化
TensorBoard 通常用于检查单个模型的训练进度。它还可以用于可视化多个模型的指标,并绘制每个模型的性能与其全局训练步骤(在它们训练时)的关系图。
TFMA 还允许开发人员在时间序列图中可视化模型指标随时间变化的情况。TensorBoard 和 TFMA 之间的区别在于横轴。TensorBoard 在全局训练步骤中可视化多个模型的流式指标,而 TFMA 在多个版本的导出的 SavedModel 中可视化为单个模型计算的指标。
|
图 2:TensorBoard 可以将多个模型的流式指标叠加在全局训练步骤上。TFMA 只显示基于导出的 SavedModel 计算的指标,但可以将这些指标可视化为跨多个模型版本的时序。 |
聚合指标与切片指标
大多数模型评估结果都查看聚合指标。模型可能在整个评估数据集上具有可接受的 AUC,但在特定切片上表现不佳。通常,平均性能良好的模型可能会表现出通过查看聚合指标无法看到的失效模式。
切片指标允许我们更深入地分析模型在更细粒度级别上的性能。此功能使开发人员能够识别示例可能被错误标记的切片,或模型过高或过低预测的切片。例如,TFMA 可用于分析预测出租车小费慷慨程度的模型是否在白天乘坐出租车与夜间乘坐出租车的乘客之间同样有效(如果按特征小时数进行切片)。
|
图 3:TFMA 允许我们按评估数据集的不同段对指标进行切片,从而能够更细致地分析模型以及它在不同切片上的表现。 |
流式指标与全流程指标
在 TensorBoard 中可视化的 TensorFlow 指标通常是在训练期间以小批次为基础计算的。它们被称为“流式指标”,是基于这些观察到的批次的近似值。
TFMA 使用
Apache Beam 对指定的评估数据集执行
全流程。这不仅允许更准确地计算指标,而且可以扩展到庞大的评估数据集,因为 Beam 管道可以使用分布式处理后端运行。
请注意,TFMA 计算与 TensorFlow 评估工作器计算的相同 TensorFlow 指标,只是通过对指定数据集执行全流程来更准确地计算。TFMA 还可以配置为计算模型中未定义的额外指标。
此外,如果评估数据集被切片以计算特定段的指标,则每个段可能只包含少量示例。为了计算准确的指标,对这些示例进行确定性全流程非常重要。
TensorFlow 模型分析的工作原理?
在设计 TFMA 的 API 时,我们特别注意开发人员的工作流程,并尽可能减少启用此额外功能所需的信息量。因此,TFMA 只要求开发人员从训练器中导出一个单独的评估图到其自身的 SavedModel 中。TFMA 使用此 SavedModel 中的图来计算(切片)指标,并提供可视化工具来分析这些指标。
导出评估图
如果开发人员使用
TensorFlow Estimators,那么他们已经熟悉使用 export_savedmodel 方法为
TensorFlow Serving 导出 SavedModel。TFMA 提供了一个类似的
export_eval_savedmodel 方法,该方法导出一个包含评估指标和所有计算这些指标所需的其他信息的 SavedModel。eval_input_fn 也可能包含仅用于分析的特征,即未用于训练但用于切片评估指标的特征。
# use TFMA to export an eval graph from the TensorFlow Estimator
tfma.export.export_eval_savedmodel(estimator=estimator,
eval_input_receiver_fn=eval_input_fn, …)
计算(切片)指标
导出评估 SavedModel 后,开发人员可以立即运行 TFMA,它将计算在 Estimator 中配置的指标,或者额外配置他们想要计算的切片。下面的代码示例显示了如何配置用于切片的特征。
TFMA 使用
Apache Beam 使用整个数据集来评估模型。我们使用 Beam SDK 定义一个数据并行处理管道,该管道可以使用多个分布式处理后端(或运行器)运行。在本地机器(或笔记本中),可以使用
DirectRunner 在本地运行此管道。使用 Beam SDK 的主要优势之一是,相同的的数据处理管道可以在不同的后端上扩展,例如在云中使用
DataflowRunner。
# Specify the path to the eval graph and to where the result should be written
eval_model_dir = …
result_path = …
# specify slicing spec
slice_spec = [slicer.SingleSliceSpec(columns=[‘column_name’])]
# configure Beam pipeline
with beam.Pipeline(…) as pipeline:
raw_data = pipeline | ‘ReadData’ >> beam.io.Read(…)
# run TFMA Beam job
_ = raw_data | ‘EvaluateAndWriteResults’ >> tfma.EvaluateAndWriteResults(eval_model_dir,
slice_spec,
result_path)
在 Jupyter 中可视化指标
# load evaluation results
result = tfma.load_eval_result(result_path)
# render results
tfma.viewer.render_slicing_metrics(result)
render_slicing_metrics 调用在 Jupyter 笔记本中加载切片浏览器组件(参见图 4),并允许开发人员检查 TFMA 评估运行的结果。
|
图 4:在 Jupyter 笔记本中加载的切片浏览器组件。它允许开发人员显示按特征值切片的指标直方图,并识别性能不佳的切片。 |
图 4 中的动画演示了如何识别 AUC 最低的切片的工作流程:首先选择“指标直方图”进行可视化,过滤以仅显示具有 100 个或更多示例的切片,选择指标“auc”,按“auc”对表格进行排序,然后选择 AUC 最低的行。在本例中,它是 trip_start_hour 的特征值为 2 的切片(使用我们
端到端示例 中的模型和数据)。一旦确定了一个有趣的切片,开发人员就可以调查这是否是预期的,或者是否需要对其进行缓解。
立即尝试 TensorFlow 模型分析!
我们已经将 TFMA 开源,并将其发布在 GitHub 上,地址为
github.com/tensorflow/model-analysis,采用 Apache 2.0 许可证。此版本包含导出评估 SavedModel、使用 Apache Beam 计算切片指标以及在 Jupyter 笔记本中可视化这些指标所需的一切。
我们还发布了一个广泛的
端到端示例,展示了开发人员如何将
TensorFlow Transform、TensorFlow
Estimators、
TensorFlow 模型分析 和
TensorFlow Serving 结合使用。
为了帮助开发人员入门,我们建议阅读并尝试在 GitHub 上的端到端
示例。
TensorFlow 模型分析的下一步
如引言中所述,开发人员可以使用 TFMA 针对阈值评估模型质量,分析模型在不同数据切片上的行为,并识别需要通过数据清理或改进建模来解决的失效模式。
通过此版本,我们将 TFMA 提供给 TensorFlow 社区,以分析 TensorFlow 模型并提高部署的模型质量。我们很快将添加计算无法在 TensorFlow 图中计算的指标的功能,例如排名指标。
除了能够在本地(使用
DirectRunner)和在 Google Cloud 上(使用
DataflowRunner)运行 TFMA 之外,
Apache Flink 和
Apache Beam 社区即将完成 Flink Runner 的开发。关注相应的
JIRA 票据、
Apache Beam 博客 或
邮件列表 以获取有关 Flink Runner 可用性的通知。社区也已开始开发 Spark Runner,该运行器将在几个月内发布。
在 Google,我们将 TensorFlow 模型分析用作名为
TensorFlow Extended (TFX) 的更大 ML 平台的一部分。在持续运行的 TFX 管道中,我们使用它来自动验证 TensorFlow 模型和交互式模型分析工作流程(例如,使用图 4 中显示的切片浏览器组件)。正如在
TensorFlow 开发者峰会 上宣布的那样,我们将在未来开源更多 TFX。敬请关注
TensorFlow 博客,了解即将发布的 TFX 文章,并在 Twitter 上关注 TensorFlow。