yamaxifeng 2019-03-07
自 2015 年开源以来,TensorFlow 得到了越来越多开发者的认可,成为了当前最受欢迎的深度学习框架之一。据现场介绍,目前为止 TensorFlow 已经被下载超过 4100 万次、提交 5 万多次代码更新、1800 多位贡献者。
与此同时,这 3 年来深度学习框架之争越来越激烈:Facebook 主推的 PyTorch 成为后起之秀,有力压 TensorFlow 之势;2016 年国内科技巨头百度发布 PaddlePaddle,2018 年底发布的 PaddlePaddle 1.0 版本标志着该框架走向成熟。
不得不说,迫于 PyTorch 的压力,TensorFlow 2.0 有了众多改变,例如 2018 年 9 月份在上海谷歌开发者大会上,机器之心了解到一个重大改变是将会把 Eager Execution 变为 TensorFlow 默认的执行模式。2019 年 1 月份,谷歌上线了 TensorFlow 2.0「开发者预览版」,让开发者们可以尝试使用。
下图展示了近几年 TensorFlow 的版本更新。但今天,TensorFlow 已经成熟为一个完全端到端的生态系统,所以今天发布的 TensorFlow 2.0 标志着一个新时代的开始。
TensorFlow 作为下载量最大的深度学习框架,过去收到了大量的反馈。据介绍,TensorFlow 用户希望能够有更简单的 API、减少冗余、改进文档与示例。因此,TensorFlow 2.0 在设计上注重以下三点:简单、强大、可扩展。
在简单方面,TensorFlow 2.0 提供更简化的 API、注重 Keras、结合了 Eager Execution。通过扩展到 exaflops 级别,TensorFlow2.0 变得更加强大,在同样的稳健性与性能下效率会更高。
TensorFlow 在过去的开发中已经构建了非常多的模块或组件,而 TensorFlow 2.0 则需要对整体工作流组件做极大的优化。下图展示了 TensorFlow 的高层设计架构,这些组件和特征将被打包成一个综合平台,从而支持从训练到部署的整个机器学习工作流程。
下图展示了 Tensorflow2.0 的强大 API 组件在整个工作流的适配,其中数据导入与处理可调用 tf.data、模型构建可以用便捷高效的 Keras 与 Estimators、训练又会有 Eager 模式和 Autograph 新特性。最后保存的模型还能通过不同的模块部署到云、移动端和网页等等。
基于这些整体设计,TF 2.0 也在快速成长。工程总监 Rajat Monga 随后宣布,TensorFlow 2.0 Alpha 版今天发布,RC 版将于今年第二季度发布。
TensorFlow 2.0 的特性主要体现在三方面,即易用性、简洁性与灵活性。其中易用性主要体现在使用 tf.keras 作为高级 API,且将 Eager execution 作为默认模式。如下所示在 2.0 中定义加法运算不再返回节点属性,而是直接返回运算值:
TensorFlow 一直有很多庞大而冗余的 API 函数,尤其是 contrib 模块里。但在 TF 2.0 中,开发团队做了大量工作来移除重复的 API 函数,并重新组织它们。
此外,tf.contrib 将从核心 TensorFlow 存储库和构建过程中移除。TensorFlow 的 contrib 模块已经超出了单个存储库可以维护和支持的范围。较大的项目最好单独维护,而较小的扩展将逐渐移至核心 TensorFlow 代码。
尽管 TF 2.0 更关注使用便捷性,但这并不表明会牺牲灵活性。它同样提供完全的底层 API,同样能通过 tf.raw_ops 访问内部 OP。
此外,这些特性听起来很美好,但 TF 2.0 的向下兼容性同样十分重要。TF 2.0 将增加兼容性模块 tf.compat.v1,以及提供升级 1.X 代码的脚本。在我们使用 pip 安装 TensorFlow 2.0 时,系统会自动添加 tf_upgrade_v2 脚本,它可将现有的 TensorFlow Python 代码转换为 TensorFlow 2.0 代码。
如下所示在升级代码时会自动将 1.X 的 API 换为新的 API,如果 TF2.0 没有对等的 API,那么还能调用 tf.compat.v1 使用 1.X 的兼容 OP。因为 tensorflow.compat.v1 在 TensorFlow 2.x 的时间线内将长期得到维护,我们用 TensorFlow 1.x 编写的代码也能保持功能。
可能 TensorFlow 2.0 最明显的改变就是将 Eager execution 作为默认优先模式。这表明任何运算在调用后就会立即运行,我们不再需要预先定义静态图,再通过「tf.Session.run()」执行图的各个部分。
a = tf.constant([1, 2]) b = tf.constant([3, 4]) print(a + b) # returns: tf.Tensor([4 6], shape=(2,), dtype=int32)
此外,Eager execution 还有一个很重要的新特性,即 tf.function 注释可以将 Python 程序转换成 TensorFlow 计算图,所有我们熟悉的 Python 控制流和内置函数等都可以转化为 TensorFlow 计算图。
这个过程保留了 TensorFlow1.x 基于静态计算图执行的所有优点:性能优化、远程执行,以及序列化、导出和部署的能力,同时增加了用简单 Python 表达程序的灵活性和易用性。因此总体而言,Eager execution 将是 2.0 的核心功能,它会使 TensorFlow 更容易学习和应用。
TF 2.0 当然是 Dev Summit 中的重头戏,但经过一年,很多模块与功能都走向了成熟,其中就包含 TensorFlow.js。
2018 年,谷歌发布了 TensorFlow.js,一个在浏览器、节点和其他平台中使用 JS 建立、部署机器学习模型的库。自发布以来,TensorFlow.js 被大量采用,截至目前该库已被下载 30 万次,Github 星标数量超过 1 万,项目贡献者超过 100 个。
今日,TensorFlow.js 1.0 版本发布,在先前版本的基础上做了许多改进,也添加了许多新特征。1.0 版本包含一个面向图像、文本、语音等常见机器学习任务的现成模型库。此外,TensorFlow.js 1.0 还添加了运行 JS 的更多平台,例如桌面 app、移动端本地的平台等。在性能上,该版本也有极大的改进,例如相比于去年,在浏览器中 MobileNet 的推断速度快了 8 倍。
TensorFlow.js 1.0 版本项目地址:https://github.com/tensorflow/tfjs/releases
从研究到产品、从服务器端到移动端,TensorFlow 已经成熟为了一个全面的生态系统。
在 TF 2.0 和 TF.js 之外,现场还介绍了 TensorFlow 新网站,从网页中我们也可以看到谷歌将 TensorFlow 定位为端到端的开源机器学习平台,它添加了更多文档、示例和工具。
不过尴尬的是,直播过程中,小编发现 TensorFlow 新网站 404 了……
TensorFlow Federated:针对分散式数据
此外,TensorFlow 还发布了开源框架 TensorFlow Federated(TFF),它适用于分散式数据(decentralized data)上执行机器学习和其他计算。TFF 旨在促进联合学习(Federated Learning,FL)的开放性研究和实验,联合学习是一种机器学习方法,可在多个客户端上训练共享的全局模型,同时在本地保存训练数据。例如,FL 曾被用于训练手机键盘的预测模型,同时不将敏感输入数据加载到服务器上。
TensorFlow Federated 让开发者能够展示和模拟联合学习系统。如图所示,每部手机在本地训练模型 (A)。它们的更新会汇总到一起 (B),形成一个改进后的共享模型 (C)。
TFF 可使开发者在自己的模型和数据上模拟使用联邦学习算法,促进对新算法的实验。TFF 提供的构建块还可用于实现非学习计算。TFF 的接口由两个层组成:Federated Learning (FL) API 和 Federated Core (FC) API。FC API 支持针对分散式数据集的各种计算的表达。
TensorFlow Privacy 开源库
TensorFlow Privacy 是 TensorFlow 今天发布的另一个开源库,不仅能让开发者在保护隐私的情况下训练机器学习模型,也能让研究者在保护隐私的情况下推进机器学习的前沿研究。
现代机器学习越来越多地被应用到新技术和用户体验中,很多应用需要基于敏感数据(如个人照片或邮件)来训练。完美情况下,训练模型的参数应该编码一般模式,而不是特定训练样本的事实。差分隐私(differential privacy)技术可用于保护隐私数据,当模型基于用户数据训练时,差分隐私技术可以提供强数学保证,确保模型不学习或记住任意用户的数据细节。对于深度学习来说,更要添加额外的保障。
谷歌近年来开展机器学习差分隐私方面的基础研究,以及开发实用的差分隐私机制。今天,谷歌正式发布 TensorFlow Privacy。它不要求用户具备隐私及其底层机制方面的专业知识,使用标准 TensorFlow 框架的用户在使用 TensorFlow Privacy 时也无需对模型架构、训练步骤做任何更改,只需简单地修改几行代码,并调整与隐私相关的超参数。
Coral 开发板和 USB 加速器
比较有趣的是,今日谷歌还发布两个全新的硬件产品:Coral 开发板和 USB 加速器。
首先介绍下 Coral。Coral 是一个构建智能设备的平台,它提供完全本地的 AI 工具箱,包括硬件组件、软件工具,以及帮助你创造、训练、运行神经网络的模块。
Coral 的首个硬件组件就是之前谷歌发布的 ASIC——Edge TPU,它能为低功率设备提供极高的机器学习推理性能。例如,它能以高能效方式在 100+ 的 fps 下执行 MobileNet v2 这样的视觉模型。
Coral 摄像模块、开发板和 USB 加速器。
作为全新的开发产品,Coral 开发板是个完全集成的系统,它被设计成构建在载板上的系统模块(SoM)。SoM 把强大的 NXP iMX8M SoC 与谷歌的 Edge TPU 协处理器(包括 Wi-Fi、蓝牙、RAM 和 eMMC 存储)融合在了一起。为了让计算机视觉应用原型更简单,谷歌还提供了一个摄像头连接开发板与 MIPI 接口。
为了把 Edge TPU 加入到已有的设计中,Coral USB 加速器允许通过 USB2.0、3.0 接口轻松接入到任何 Linux 系统中,之后谷歌还会添加 PCIe 版本。
价格方面,Coral 开发板售价为 149.99 美元,Coral USB 加速器售价为 74.99 美元。
以上就是一年一度的谷歌 TensorFlow 开发者大会上的全新发布了。总体而言,我们看到了 TensorFlow 在设计上的重大革新。虽然今日没能看到 TensorFlow 2.0 的正式发布,但这些新特征是否让你对它有所期待呢?
最后提一句,小编中意 PyTorch(差点与另一小编打起来)。
来自另一小编的反对