文 / Matthias Feys,ML6 首席技术官
来源 | TensorFlow 公众号
机器学习模型需要数据来训练,但是通常需要对这些数据进行预处理,以便在训练模型时发挥作用。这种预处理(通常称为 “特征工程”)采用多种形式,例如:规范化和缩放数据,将分类值编码为数值,形成词汇表,以及连续数值的分级。
在生产过程中利用机器学习时,为了确保在模型的离线培训期间应用的特征工程步骤与使用模型用于预测时应用的特征工程步骤保持相同,这往往就成为一项极具挑战性的任务。此外,放眼当今世界,机器学习模型会在超大型的数据集上进行训练,因此在训练期间应用的预处理步骤将会在大规模分布式计算框架(例如 Google Cloud Dataflow 或 Apache Spark)上实现。由于训练环境通常与服务环境大相径庭,在训练和服务期间执行的特征工程之间可能会产生不一致的情况。
幸运的是,我们现在有了 tf.Transform,这是一个 TensorFlow 库,它提供了一个优雅的解决方案,以确保在训练和服务期间特征工程步骤的一致性。 在这篇文章中,我们将提供在 Google Cloud Dataflow 上使用 tf.Transform,以及在 Cloud ML Engine 上进行模型训练和服务的具体示例。
注:tf.Transform 链接
https://github.com/tensorflow/transform
应用于机器模拟上的变换用例
ecc.ai 是一个有助于优化机器配置的平台。 我们模拟物理机器(例如瓶灌装机或饼干机)以便找到更优化的参数设置。 由于每个模拟的物理机器的目标是具有与实际机器相同的输入/输出特性,我们称之为 “数字孪生”。
这篇文章将展示这个 “数字孪生” 的设计和实现过程。 在最后一段中,您可以找到有关我们之后如何使用这些数字孪生来优化机器配置的更多信息。
注:ecc.ai 链接
https://ecc.ai/
tf.Transform 释义
tf.Transform 是 TensorFlow 的一个库,它允许用户定义预处理管道模式并使用大规模数据处理框架运行这些管道模式,同时还以可以作为 TensorFlow 图形的一部分运行的方式导出管道。 用户通过组合模块化 Python 函数来定义管道,然后 tf.Transform 随着 Apache Beam 一起运行。 tf.Transform 导出的 TensorFlow 图形可以在使用训练模型进行预测时复制预处理步骤,比如在使用 TensorFlow Serving 服务模型时。
注:Apache Beam 链接
https://beam.apache.org/
TensorFlow Serving 链接
https://ai.googleblog.com/2016/02/running-your-models-in-production-with.html
tf.Transform 允许用户定义预处理管道。 用户可以实现预处理数据以用于 TensorFlow 训练,还可以将转换编码为 TensorFlow 图形后导出。然后将该变换图形结合到用于推断的模型图中
tf.Transform 建立数字孪生
数字双模型的目标是能够根据其输入预测机器的所有输出参数。 为了训练这个模型,我们分析了包含这种关系的观察记录历史的日志数据。 由于日志的数据量可能会相当广泛,理想的情况是应该以分布式方式运行此步骤。 此外,必须在训练和服务的时间之间使用相同的概念和代码,这样对预处理代码的改动最小。
开发伊始,我们在任何现有的开源项目中都找不到此功能。 因此,我们开始构建用于 Apache Beam 预处理的自定义工具,