TensorFlow 2.0新功能和新变化,专注于简单性和易用性
2019年01月16日 由 浅浅 发表
573843
0
TensorFlow已发展成为世界上最受欢迎和广泛采用的 ML平台之一。为该社区做出各种贡献的来源包括:
- 研究人员(例如,预测地震余震,检测乳腺癌)
- 开发人员(例如,构建应用程序以识别患病植物并帮助人们减肥)
- 公司(例如,eBay,Dropbox和AirBnB改善客户体验)
还有很多其他力量……
11月,TensorFlow迎来了其3岁生日,回顾了多年来增加的功能。同时迎来了另一个重要里程碑TensorFlow 2.0!
TensorFlow 2.0将专注于简单性和易用性,具有以下更新:
- 使用Keras和热切的执行轻松建模。
- 在任何平台上实现生产中的鲁棒模型部署。
- 为研究提供强大的实验工具。
- 通过清理已弃用的API并减少重复来简化API。
在过去几年中,我们为TensorFlow添加了许多组件。通过TensorFlow 2.0,这些将被打包成一个综合平台,支持从训练到部署的机器学习工作流程。让我们使用如下简化概念图来了解TensorFlow 2.0的新架构:
注意:虽然此图的训练部分侧重于Python API,但TensorFlow.js也支持训练模型。其他语言也存在不同程度的支持,包括:Swift,R和Julia。
简单的模型构建
在最近的博客文章中,团队宣布Keras是一个用户友好的机器学习API标准,将成为用于构建和训练模型的中央高级API。Keras API使您可以轻松开始使用TensorFlow。
重要的是,Keras提供了几个模型构建API(顺序,功能和子类),因此你可以为项目选择正确的抽象级别。TensorFlow的实现包含增强功能,包括eager execution,立即迭代和直观调试,以及tf.data,用于构建可扩展的输入管道。
下面是一个示例工作流程(在接下来的几个月中,将努力更新下面链接的指南):
使用tf.data加载数据。使用输入管道读取训练数据tf.data。使用描述特征特征,例如分段和特征交叉tf.feature_column。还支持来自内存数据的便捷输入(例如,NumPy)。
使用tf.keras或Premade Estimator构建,训练和验证你的模型。Keras与TensorFlow的其余部分紧密集成,因此你可以随时访问TensorFlow的功能。一组标准的打包模型(例如,线性或逻辑回归,梯度提升树,随机森林)也可以直接使用(用tf.estimatorAPI 实现)。如果你不想从头开始训练模型,你很快就可以使用传输学习来训练使用TensorFlow Hub模块的Keras或Estimator模型。
通过eager execution运行和调试,然后在图形上使用tf.function。默认情况下,TensorFlow 2.0以eager execution的方式运行,以便于使用和顺利调试。
此外,tf.function 注释透明地将你的Python程序转换为TensorFlow图形。此过程保留了1.x TensorFlow基于图形的执行的所有优点:性能优化,远程执行以及轻松序列化,导出和部署的能力,同时增加了在简单Python中表达程序的灵活性和易用性。
使用分布策略进行分布式训练。对于大型ML训练任务,分发策略API可以轻松地在不同硬件配置上分布和训练模型,而无需更改模型定义。
由于TensorFlow支持各种硬件加速器,如CPU,GPU和TPU,因此你可以将训练工作负载分配到单节点/多加速器以及多节点/多加速器配置(包括TPU Pod)。虽然此API支持各种群集配置,但还提供了在本地或云环境中部署Kubernetes群集训练的模板。
导出到SavedModel。TensorFlow将在SavedModel上标准化,作为TensorFlow Serving,TensorFlow Lite,TensorFlow.js,TensorFlow Hub等的交换格式。
在任何平台上实现生产中的鲁棒模型部署
TensorFlow始终为生产提供直接途径。无论是在服务器,边缘设备还是Web上,TensorFlow都可以让你轻松地训练和部署模型,无论你使用何种语言或平台。在TensorFlow 2.0中,我们通过标准化交换格式和对齐API来提高跨平台和组件的兼容性和可比性。
训练并保存模型后,可以直接在应用程序中执行它,也可以使用其中一个部署库为其提供服务:
TensorFlow Serving:TensorFlow库允许模型通过HTTP / REST或gRPC /协议缓冲区提供服务。
TensorFlow Lite:TensorFlow针对移动和嵌入式设备的轻量级解决方案提供了在Android,iOS和嵌入式系统(如Raspberry Pi和Edge TPU)上部署模型的功能。
TensorFlow.js:允许在JavaScript环境中部署模型,例如在Web浏览器或服务器端通过Node.js。
TensorFlow.js:支持使用类似Keras的API在JavaScript中定义模型并直接在Web浏览器中进行训练。
TensorFlow还支持其他语言(一些由更广泛的社区维护),包括C,Java,Go,C#,Rust,Julia,R等。
为研究提供强大的实验工具
TensorFlow可以使新概念从概念转换为代码,从模型到发布的过程更轻松。TensorFlow 2.0集成了许多功能,可以在不牺牲速度或性能的情况下定义和训练最先进的模型:
Keras Functional API和Model Subclassing API:允许创建复杂的拓扑,包括使用剩余层,自定义多输入/输出模型以及强制写入的正向传递。
自定义训练逻辑:使用tf.GradientTape和tf.custom_gradient进行梯度计算的细粒度控制。
为了获得更大的灵活性和控制,低级TensorFlow API始终可用,并与更高级别的抽象结合使用,以实现完全可定制的逻辑。
TensorFlow 2.0带来了一些新的补充,使研究人员和高级用户用更丰富的扩展进行试验,如Ragged Tensors, TensorFlow Probability, Tensor2Tensor。
除了这些功能外,TensorFlow还提供了易于执行的简单原型设计和调试,分销策略API和AutoGraph,可以进行大规模训练,并支持TPU,使TensorFlow 2.0成为一个易于使用,可定制且高度可扩展的平台,用于进行最新的ML研究,并将其转化为生产管道。
TensorFlow 1.x和2.0之间的区别
自从首次开源TensorFlow以来,已经有许多版本和API迭代。随着ML的快速发展,该平台已经发展壮大,现在支持多样化的用户组合,满足各种需求。使用TensorFlow 2.0,我们有机会清理和模块化基于语义版本控制的平台。
以下是一些较大的变化:
- 删除queue runners以支持tf.data
- 删除图表集合
- 变量处理方式的变化
- 移动和重命名API符号
此外,tf.contrib将从核心TensorFlow存储库和构建过程中删除。TensorFlow的contrib模块已经超越了单个存储库中可维护和支持的模块。较大的项目可以更好地单独维护,而较小的扩展将逐渐转向核心TensorFlow代码。
一个特殊兴趣小组集团(SIG)已成立,维持并进一步发展一些更重要的贡献项目。如果你有兴趣,可进行参与:
github.com/tensorflow/community/pull/37
兼容性和连续性
为了简化向TensorFlow 2.0的过渡,将有一个转换工具,它可以更新TensorFlow 1.x Python代码以使用TensorFlow 2.0兼容API,或者标记代码无法自动转换的情况。
并非所有更改都可以完全自动完成。例如,某些已弃用的API没有直接等效项。这就是我们引入tensorflow.compat.v1兼容性模块的原因,该模块保留了对完整TensorFlow 1.x API(不包括tf.contrib)的支持。该模块将在TensorFlow 2.x的生命周期内维护,并允许使用TensorFlow 1.x编写的代码保持功能。
此外,SavedModels或存储的GraphDefs将向后兼容。使用1.x保存的SavedModels将继续在2.x中加载和执行。但是,2.0中的更改意味着原始检查点中的变量名称可能会更改,因此使用具有已转换为2.0的代码的2.0之前的检查点无法保证正常工作。详细信息请参阅Effective TensorFlow 2.0指南:
github.com/tensorflow/docs/blob/master/site/en/r2/guide/effective_tf2.md
团队相信TensorFlow 2.0将为社区带来巨大的利益,并且已投入大量精力使过渡变得尽可能简单。但是,过渡当前的管道需要时间,团队非常关心社区目前对学习和使用TensorFlow的投资,并将在最后的1.x版本中提供12个月的安全补丁,以便为现有用户提供充足的时间进行过渡并获得TensorFlow 2.0的所有优势。
TensorFlow 2.0的时间表
TensorFlow 2.0将于今年年初发布公开预览版。但你无须等待,你已经可以通过使用tf.keras和eager execution,预打包模型和部署库来开发TensorFlow 2.0。Distribution Strategy API 目前已部分可用。
TensorFlow已经从用于深度学习的软件库发展成为适用于所有类型ML的完整生态系统。TensorFlow 2.0简单易用,适用于所有平台上的所有用户。