作者:TensorFlow
编译:ronghuaiyang
导读
TensorFlow2.0将聚焦于易用性,Keras成为了推荐的模型构建API,还有大家可能更加关心的1.x到2.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的新架构,如下图所示:
简单的模型构建
在最近的一篇博客文章中,我们宣布Keras,一个用户友好的机器学习API标准,将成为用于构建和训练模型的核心高级API。Keras API使开始使用TensorFlow变得很容易。重要的是,Keras提供了几个模型构建api(顺序的、功能的和子类化的),因此你可以为你的项目选择正确的抽象级别。TensorFlow的实现包含增强功能,包括快速执行、即时迭代和直观调试,以及tf.data,用于构建可扩展的输入pipelines。
下面是一个工作流程示例(在接下来的几个月里,我们将更新下面链接的指南):
- 使用tf.data加载数据。使用使用tf.data创建的输入管道读取训练数据。使用tf.feature_column来描述特征,例如bucketing和Feature cross。还支持从内存数据(例如NumPy)方便地输入。
- 使用tf.keras构建、训练和验证你的模型。或使用Premade Estimators。Keras与TensorFlow的其余部分紧密集成,因此你可以随时访问TensorFlow的特性。还可以直接使用一组标准的打包模型(例如,线性或逻辑回归、梯度增强树、随机森林)(使用tf.estimator API实现)。如果你不想从头开始训练模型,那么你很快就可以使用transfer learning来使用TensorFlow Hub中的模块来训练Keras或Estimator模型。
- 运行并调试 eager execution,然后使用 tf.function来利用图的优点。 TensorFlow 2.0在默认情况下运行时执行速度快,便于使用和调试。此外,tf.function注释透明地将Python程序转换为张量流图。这个过程保留了1.x的所有优点。基于TensorFlow图形的执行:性能优化、远程执行以及轻松序列化、导出和部署的能力,同时增加了用简单Python表示程序的灵活性和易用性。
- 使用分布策略进行分布式培训。对于大型ML培训任务,Distribution Strategy API使得在不更改模型定义的情况下,在不同的硬件配置上分发和训练模型变得很容易。由于TensorFlow提供了对一系列硬件加速器(如cpu、gpu和TPUs)的支持,因此可以将训练工作负载分布到单节点/多加速器以及多节点/多加速器配置,包括TPU Pods。虽然这个API支持多种集群配置,但是提供了在on-prem或云环境中的Kubernetes clusters上部署训练的模板。
- SavedModel导出 TensorFlow将基于SavedModel标准化,作为TensorFlow service、TensorFlow Lite和TensorFlow.js、TensorFlow Hub等的交换格式。
在任何平台上进行生产中的健壮模型部署
TensorFlow一直为生产提供直接的途径。无论是在服务器、边缘设备还是web上,TensorFlow都允许你轻松地训练和部署模型,无论使用何种语言或平台。在TensorFlow 2.0中,通过标准化交换格式和对齐的api,我们正在改进跨平台和组件之间的兼容性和对称性。
一旦你训练并保存了你的模型,你就可以直接在你的应用程序中执行它,或者使用其中一个部署库来提供服务:
- TensorFlow service :一个TensorFlow库,允许模型通过HTTP/REST或gRPC/协议缓冲区提供服务。
- TensorFlow Lite: TensorFlow针对移动和嵌入式设备的轻量级解决方案提供了在Android、iOS和嵌入式系统(如Raspberry Pi和Edge TPUs)上部署模型的能力。
- TensorFlow.js:支持通过Node.js在JavaScript环境中部署模型,例如在web浏览器或服务器端。js还支持在JavaScript中定义模型,并使用类似于keras的API在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和自动图,并支持tpu ,使TensorFlow 2.0一个易于使用的,可定制的,高度可扩展的平台,以及进行先进的ML研究和翻译研究生产pipelines。
TensorFlow1.x和2.0之间的差异
自从我们第一次开源TensorFlow以来,已经有了许多版本和API迭代。随着ML的快速发展,该平台已经得到了极大的发展,现在支持不同需求的不同用户组合。使用TensorFlow 2.0,我们有机会基于语义版本控制清理和模块化平台。
以下是一些更大的变化:
- 删除队列运行器以支持tf.data。
- 删除图集合。
- 改变变量的处理方式。
- API符号的移动和重命名。
此外,将从核心TensorFlow存储库和构建流程中删除tf.contrib。TensorFlow的contrib模块已经超出了单个存储库中可以维护和支持的范围。较大的项目最好单独维护,而较小的扩展将逐步扩展到核心TensorFlow代码。已经成立了一个特别兴趣小组(SIG)来维持和进一步发展一些更重要的计划项目。如果您有兴趣投稿,请参与这个RFC。
兼容性和连续性
为了简化到TensorFlow 2.0的迁移,将有一个更新TensorFlow 1的转换工具。使用TensorFlow 2.0兼容api的Python代码,或者标记代码不能自动转换的情况。
并不是所有的更改都可以完全自动完成。例如,一些不推荐的api没有直接对应的api。这就是为什么我们引入了TensorFlow .compat.v1兼容模块,它保留了对完整TensorFlow 1的支持。(不包括tf.contrib)。此模块将在TensorFlow 2的生命周期内进行维护。并将允许使用TensorFlow 1编写代码。保持功能。
此外,SavedModels或已存储的GraphDefs将向后兼容。SavedModels用1.x保存。将继续加载并在2.x中执行。但是,2.0中的更改将意味着原始检查点中的变量名可能会更改,因此使用包含已转换为2.0的代码的2.0前检查点并不保证能够工作。有关详细信息,请参阅Effective TensorFlow 2.0指南。
我们相信TensorFlow 2.0将给社区带来巨大的好处,并且我们已经投入了大量的努力使转换尽可能容易。然而,我们也认识到迁移当前的pipeline需要时间,并且我们非常关心社区在学习和使用TensorFlow方面的当前投资。我们将提供12个月的安全补丁到最后一个1.x。为了给我们现有的用户足够的时间进行转换,并获得TensorFlow 2.0的所有好处。
TensorFlow 2.0的时间轴
TensorFlow 2.0将在今年年初作为公众预览版发布。但是为什么要等呢?你已经可以使用 tf.keras以TensorFlow 2.0的方式进行开发了。keras和即时执行,预打包的模型和部署库,分布式策略API今天也已经部分可用。
我们对TensorFlow 2.0和即将到来的变化非常兴奋。TensorFlow已经从一个用于深度学习的软件库成长为一个适用于所有类型ML的完整生态系统。
英文原文:https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8