使用 Google Cloud 上的 tf.Transform 对 TensorFlow 管道模式进行预处理

本文介绍了如何使用tf.Transform库在Google Cloud Dataflow上进行机器学习模型的预处理,确保训练和服务期间的一致性。文章通过数字孪生的概念展示了在Apache Beam和Cloud ML Engine上的应用流程,强调了tf.Transform在处理大规模数据和简化模型部署中的价值。
摘要由CSDN通过智能技术生成

文 / 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 预处理的自定义工具,

接口cloud.openapi.login.code2Session是用于获取小程序用户的OpenID和SessionKey的接口,使用该接口需要先开通云开发环境,然后在小程序中进行调用。 具体使用方法如下: 1. 在小程序中调用wx.login()方法获取用户的临时登录凭证code。 2. 在小程序中调用wx.cloud.callFunction()方法,将code作为参数传递给云函数。云函数中使用接口cloud.openapi.login.code2Session来获取用户的OpenID和SessionKey。 3. 在云函数中调用cloud.openapi.login.code2Session方法,将小程序的AppID、AppSecret和用户的临时登录凭证code作为参数传递给该方法。 4. 当接口调用成功后,会返回一个包含用户OpenID和SessionKey的对象。 以下是一个示例代码: ``` // 小程序端代码 wx.login({ success: res => { wx.cloud.callFunction({ name: 'login', data: { code: res.code }, success: res => { console.log(res.result) }, fail: err => { console.error(err) } }) } }) // 云函数代码 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) exports.main = async (event, context) => { const wxContext = cloud.getWXContext() try { const result = await cloud.openapi.login.code2Session({ appid: wxContext.APPID, secret: wxContext.APPSECRET, js_code: event.code }) return result } catch (err) { console.error(err) return err } } ``` 需要注意的是,该接口需要小程序的AppID和AppSecret,因此需要在云函数中获取这些信息。可以通过cloud.getWXContext()方法获取当前小程序的AppID和AppSecret。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值