TensorFlow作者

官方解读:TensorFlow 2.0中即将到来的所有新特性

四天前,TensorFlow 2.0 预览版终于上线了,看来稳定版距离我们也不会太远——按照官方说法会是今年的第一个季度。近日,TensorFlow 官方博客全面介绍了 2.0 版的所有新特性。为了让开发者们简单高效地搭建模型,2.0 版本经过了大幅度重建。

作为最流行的深度学习框架,TensorFlow 已经成长为全球使用最广泛的机器学习平台。目前,TensorFlow 的开发者社区包括研究者、开发者和企业等。

去年 11 月,TensorFlow 庆祝了自己的三岁生日。不久之后,也将迎来另一个重要里程碑——TensorFlow 2.0。

TensorFlow 2.0 将专注于简洁性和易用性,主要升级方向包括:

  • 使用 Keras 和 eager execution 轻松构建模型。

  • 在任意平台上实现稳健的生产环境模型部署。

  • 为研究提供强大的实验工具。

  • 通过清理废弃的 API 和减少重复来简化 API。

谷歌表示,在过去几年里,TensorFlow 增加了很多组件。通过 TensorFlow 2.0 版本的大幅度重建,这些功能将被打包成为一个综合平台,支持从训练到部署的整个机器学习工作流程。下图简要展示了 TensorFlow 2.0 的新架构:

Note:虽然上图的训练部分侧重 Python API,但是 TensorFlow.js 也支持训练模型。TensorFlow 2.0 对其他语言也有不同程度的支持,包括 Swift、R 语言和 Julia

轻松构建模型

TensorFlow 团队近期宣布 Keras API 将成为 TensorFlow 中构建和训练模型的核心高级 API。Keras API 使得使用 TensorFlow 开启项目变得简单。重要的是,Keras 提供多个模型构建 API(Sequential、Functional 和 Subclassing),这样你可以选择适合自己项目的抽象级别。TensorFlow 的实现有多项增强,包括可直接迭代和直观调试的 eager execution,以及用于构建可扩展输入流程的 tf.data。

以下是工作流程示例(在接下里的几个月中,我们将努力更新以下链接的指南):

  1. 用 tf.data 加载数据。用 tf.data 创建的输入线程读取训练数据。使用 tf.feature_column 描述特征特性,例如分段和特征交叉。还支持从内存数据(例如 NumPy)中方便地输入。

  2. 使用 tf.keras、Premade Estimators 构建、训练和验证模型。Keras 与 TensorFlow 的其余部分紧密集成,因此你可以随时访问 TensorFlow 的功能。一组标准的打包模型(例如,线性或逻辑回归、梯度增强树、随机森林)也可以直接使用(使用 tf.estimator API 实现)。如果你不想从头开始训练一个模型,你很快就能通过 TensorFlow Hub 的模块利用迁移学习来训练 Keras 或 Estimator 模型。

  3. 用 eager execution 运行和调试,然后在图形上使用 tf.function。TensorFlow 2.0 默认用 eager execution 运行,以便于轻松使用和顺利调试。此外,tf.function 注释透明地将 Python 程序转换成 TensorFlow 图。这个过程保留了 TensorFlow1.x 基于图形执行的所有优点:性能优化、远程执行,以及序列化、导出和部署的能力,同时增加了用简单 Python 表达程序的灵活性和易用性。

  4. 使用分布式策略进行分布式训练。对于大部分 ML 训练任务来说,Distribution Strategy API 使得在不同的硬件配置上分布和训练模型变得很容易,而无需改变模型定义。由于 TensorFlow 为一系列硬件加速器(如 CPU、GPU、TPU)提供支持,你可以将训练工作负载分配给单节点/多加速器以及多节点/多加速器配置,包括 TPU Pods。尽管这个 API 支持多种群集配置,但提供了在本地或云环境中的 Kubernete 集群上部署训练的模板。

  5. 导出至 SavedModel。TensorFlow 将在 SavedModel 上标准化,来作为 TentsorFlow Serving、TensorFlow Lite、TensorFlow.js、TentsorFlow Hub 等的交换格式。

在任意平台上实现稳健的生产环境模型部署

TensorFlow 总是会提供直接的产品化路径。不论是在服务器、边缘设备还是网页上,也不论你使用的是什么语言或平台,TensorFlow 总能让你轻易训练和部署模型。在 TensorFlow 2.0 中,我们正在通过标准化交换格式和调整 API 来改进跨平台和组件的兼容性和奇偶性(parity)。

  • TensorFlow Serving:允许通过 HTTP/REST 或 gRPC /协议缓冲区为模型提供服务的 TensorFlow 库。

  • TensorFlow Lite:TensorFlow 针对移动和嵌入式设备的轻量级解决方案提供了在 Android、iOS 和嵌入式系统(如 Raspberry Pi 和 Edge TPU)上部署模型的能力。

  • TensorFlow.js:支持在 JavaScript 环境中部署模型,例如通过 Node.js. TensorFlow.js 在 web 浏览器或服务器端部署模型,还支持在 JavaScript 中定义模型和在 web 浏览器中使用类似 Keras 的 API 直接训练模型。

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 还提供了易于制作原型和调试的 eager execution,可以大规模训练的 Distribution Strategy API 和 AutoGraph,以及对 TPU 的支持,使 TensorFlow 2.0 成为一个易于使用、可定制和高度可扩展的平台,用于展开最先进的 ML 研究并将该研究转化为生产流水线。

TensorFlow 1.x 和 2.0 的区别

自我们开源 TensorFlow 以来,到现在已经发展出很多个版本和 API 迭代。随着 ML 的快速发展,这个平台也有了巨大的进展,现在支持很多具有不同需求的不同用户。有了 TensorFlow 2.0,我们有机会基于语义版本控制来清理和模块化平台。

此次的重大改变包括:

  • 删除 queue runner 以支持 tf.data。

  • 删除图形集合。

  • 变量处理方式的变化。

  • API 符号的移动和重命名。

此外,tf.contrib 将从核心 TensorFlow 存储库和构建过程中移除。TensorFlow 的 contrib 模块已经超出了单个存储库可以维护和支持的范围。较大的项目最好单独维护,而较小的扩展将逐渐移至核心 TensorFlow 代码。一个特别兴趣小组(SIG)已经成立,以维持和进一步发展一些更重要的未来 contrib 项目。如果你有兴趣贡献,请联系以下 RFC:

https://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 将向后兼容。用 TensorFlow 1.x 保存的 SavedModels 将继续在 2.x 中加载和执行。然而,2.0 中的更改意味着原始检查点中的变量名可能会更改,所以使用 2.0 之前的检查点而代码已转化为 2.0 时,可能无法保证有效。详情可参阅 TensorFlow 2.0 指南:

https://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 也已经部分可用。

原文链接:https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8?linkId=62351082

工程KerasTensorFlow
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

Julia技术

Julia 是MIT设计的一个面向科学计算的高性能动态高级程序设计语言,项目大约于2009年中开始,2018年8月JuliaCon2018 发布会上发布Julia 1.0。据介绍,Julia 目前下载量已经达到了 200 万次,且 Julia 社区开发了超过 1900 多个扩展包。这些扩展包包含各种各样的数学库、数学运算工具和用于通用计算的库。除此之外,Julia 语言还可以轻松使用 Python、R、C/C++ 和 Java 中的库,这极大地扩展了 Julia 语言的使用范围。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

随机森林技术

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而"Random Forests"是他们的商标。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合Breimans的"Bootstrap aggregating"想法和Ho的"random subspace method" 以建造决策树的集合。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

嵌入式系统技术

嵌入式系统,是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备,例如汽车的防锁死刹车系统。

推荐文章
暂无评论
暂无评论~