TensorFlow 是一个开源软件库,用于使用数据流图进行数值计算。它最初由 Google Brain 团队在 Google 的机器智能研究组织内开发,用于机器学习和深度神经网络研究,但该系统足够通用,也适用于各种其他领域。它在 2017 年 2 月达到了 1.0 版本,并持续快速发展,迄今为止已有 21,000 多个提交,其中许多来自外部贡献者。本文介绍了 TensorFlow、其开源社区和生态系统,并重点介绍了一些有趣的 TensorFlow 开源模型。
TensorFlow 是跨平台的。它几乎可以在所有设备上运行:GPU 和 CPU(包括移动和嵌入式平台),甚至包括张量处理单元 (TPU),TPU 是专门用于执行张量数学运算的硬件。它们尚未广泛可用,但我们最近启动了一个 alpha 计划。

opensource.com
TensorFlow 分布式执行引擎抽象了许多受支持的设备,并为 TensorFlow 平台提供了用 C++ 实现的高性能核心。
在此之上是 Python 和 C++ 前端(未来会有更多)。Layers API 为深度学习模型中常用的层提供了一个更简单的接口。在此之上是更高级别的 API,包括 Keras(更多信息请访问 Keras.io 网站)和 Estimator API,它们使训练和评估分布式模型更容易。
最后,许多常用的模型都可以直接使用,未来会有更多。
TensorFlow 执行模型
图
机器学习可能很快变得复杂,深度学习模型可能会变得很大。对于许多模型图,您需要分布式训练才能在合理的时间范围内进行迭代。而且,您通常希望将您开发的模型部署到多个平台。
在当前版本的 TensorFlow 中,您编写代码来构建计算图,然后执行它。图是一种数据结构,它完全描述了您要执行的计算。这有很多优点
- 它是可移植的,因为该图可以立即执行或保存以供以后使用,并且它可以在多个平台上运行:CPU、GPU、TPU、移动设备、嵌入式设备。此外,它可以部署到生产环境,而无需依赖构建该图的任何代码,只需要执行它所需的运行时即可。
- 它是可转换和可优化的,因为可以转换该图以为给定平台生成更优化的版本。此外,可以执行内存或计算优化,并在它们之间进行权衡。例如,这对于在大型机器上训练后支持更快的移动推理非常有用。
- 支持分布式执行
TensorFlow 的高级 API 与计算图相结合,在同一框架中实现了丰富而灵活的开发环境和强大的生产能力。
立即执行
TensorFlow 即将新增的一项功能是 立即执行,这是一种用于编写 TensorFlow 的命令式风格。当您启用立即执行时,您将立即执行 TensorFlow 内核,而不是构建稍后将执行的图。
为什么这很重要?四个主要原因
- 您可以轻松地检查和调试图中的中间值。
- 您可以在 TensorFlow API 中使用 Python 控制流——循环、条件语句、函数、闭包等。
- 立即执行应该使调试更加直接。
- 立即执行的“按运行定义”语义将使构建和训练动态图变得容易。
一旦您对以立即执行方式运行的 TensorFlow 代码感到满意,您可以自动将其转换为图。这将使保存、移植和分发您的图更容易。
此接口尚处于早期(pre-alpha)阶段。请在 GitHub 上关注其进展。
TensorFlow 和开源软件社区
TensorFlow 开源在很大程度上是为了让社区能够通过贡献来改进它。TensorFlow 团队已经建立了 流程 来管理拉取请求、审查和路由提交的问题,并回答 Stack Overflow 和 邮件列表 中的问题。
到目前为止,我们已经有超过 890 位外部贡献者为代码做出了贡献,从小的文档修复到大的新增功能,如 OS X GPU 支持 或 OpenCL 实现。(更广泛的 TensorFlow GitHub 组织已经有近 1,000 位独特的非 Google 贡献者。)
Tensorflow 在 GitHub 上拥有超过 76,000 个星标,并且使用它的其他仓库的数量每个月都在增长——截至撰写本文时,已有超过 20,000 个。
其中许多是社区创建的教程、模型、翻译和项目。如果您刚开始进行机器学习任务,它们可以成为很好的示例来源。
Stack Overflow 由 TensorFlow 团队监控,它是 获得问题解答的好方法(迄今已解答 8,000 多个)。
外部版本的 TensorFlow 在内部与内部版本没有区别,除了一些细微的差异。 这些差异包括与 Google 内部基础设施的接口(这对任何人都没有帮助)、一些路径以及尚未准备好的部分。 然而,TensorFlow 的核心是相同的。 提交给内部版本的拉取请求将在大约一天半的时间内出现在外部版本中,反之亦然。
在 TensorFlow GitHub 组织中,您不仅可以找到 TensorFlow 本身,还可以找到其他仓库的有用生态系统,包括 models、serving、TensorBoard、Project Magenta 等等。(其中一些在下面描述)。您还可以找到多种语言(Python、C++、Java 和 Go)的 TensorFlow API;社区还开发了 其他绑定,包括 C#、Haskell、Julia、Ruby、Rust 和 Scala。
性能和基准测试
TensorFlow 在衡量和透明度方面有很高的标准。该团队开发了一套详细的 基准测试,并非常仔细地包含了所有必要的细节以进行重现。我们尚未运行比较基准测试,但欢迎其他人发布全面且可重现的基准测试。
TensorFlow 网站有一个 部分 专门为注重性能的开发人员提供的部分,其中包含相关信息。优化通常可能是特定于模型的,但有一些通用指南通常可以带来很大的不同。
TensorFlow 的开源模型
TensorFlow 团队已经开源了大量模型。您可以在 tensorflow/models 仓库中找到它们。对于其中许多模型,发布的代码不仅包括模型图,还包括经过训练的模型权重。这意味着您可以直接试用这些模型,并且可以使用称为 迁移学习 的过程进一步调整它们中的许多模型。
以下是一些最近发布的模型(还有更多)
- 对象检测 API:创建能够定位和识别单个图像中多个对象的精确机器学习模型仍然是机器学习的核心挑战。最近开源的 TensorFlow 对象检测 API 产生了最先进的结果(并在 COCO 检测挑战赛中名列第一)。

opensource.com
- tf-seq2seq:Google 此前宣布了 Google 神经机器翻译 (GNMT),这是一种序列到序列 (seq2seq) 模型,目前已在 Google 翻译生产系统中使用。tf-seq2seq 是 TensorFlow 中的一个开源 seq2seq 框架,它使您可以轻松地试验 seq2seq 模型并获得最先进的结果。
- ParseySaurus 是一组预训练模型,反映了 SyntaxNet 的升级。新模型使用基于字符的输入表示,并且在根据新单词的拼写及其在上下文中的使用方式来预测新单词的含义方面做得更好。它们比以前的模型更准确,特别是对于每单词可能有数十种形式的语言,并且即使在非常大的语料库中,也可能永远不会在训练期间观察到这些形式中的许多形式。

opensource.com
- 来自 Magenta Project 的多风格模仿生成器: “风格迁移”是那些有趣的应用程序在后台所做的事情,这些应用程序将绘画的风格应用于您的照片之一。此 Magenta 模型通过 创建一个可以对图像执行多个风格化的单个网络 来扩展图像风格迁移,可以选择同时进行。(尝试在此 博客文章 中为狗图像滑动滑块。)

opensource.com
迁移学习
许多 TensorFlow 模型 都包含经过训练的权重和示例,这些示例展示了如何将它们用于 迁移学习,例如学习您自己的分类。您通常通过从训练模型的倒数第二层(编码有用的抽象)中导出有关输入数据的信息来做到这一点,然后将该信息用作输入来训练您自己的更小的神经网络,以预测您自己的类别。由于学习到的抽象的力量,额外的训练通常不需要大型数据集。
例如,您可以将迁移学习与 Inception 图像分类模型结合使用,以训练使用您的专业图像数据的图像分类器。
有关通过训练神经网络来检测专门的图像类别,从而将迁移学习用于医学诊断的示例,请参阅以下文章
而且,您也可以这样做来 学习您自己的(可能很傻的)图像分类。
对象检测 API 代码也旨在支持迁移学习。在 tensorflow/models 仓库中,有一个 示例 说明了如何使用迁移学习来引导此训练模型以 构建宠物检测器,使用狗和猫品种示例的(有些有限的)数据集。而且,如果您比狗和猫更喜欢浣熊,也请参阅 本教程。

opensource.com
在移动设备上使用 TensorFlow
移动设备是 TensorFlow 的一个很好的用例——当网络连接不良或缺失,或者将连续数据发送到服务器成本过高时,移动设备很有意义。但是,一旦您训练了模型并 准备开始使用它,您就不希望设备上的模型占用空间太大。
TensorFlow 正在努力帮助开发人员 制作精简的移动应用程序,方法是继续减少代码占用空间并支持 量化。
(虽然现在还为时过早,但也请参阅加速线性代数 [XLA],这是一种用于线性代数的特定领域编译器,可优化 TensorFlow 计算。)
TensorFlow 项目之一 MobileNet 正在开发一组计算机视觉模型,这些模型专门 设计用于 解决需要在移动设备或嵌入式应用程序中考虑的速度/准确性权衡。MobileNet 模型也可以在 TensorFlow models 仓库中找到。
较新的 Android 演示之一 TF Detect 使用了使用 Tensorflow 对象检测 API 训练的 MobileNet 模型。

opensource.com
当然,如果我们不提及“HBO 的《硅谷》如何使用移动 TensorFlow、Keras 和 React Native 构建‘Not Hotdog’”就太疏忽了。
TensorFlow 生态系统
TensorFlow 生态系统包括许多工具和库,可帮助您更有效地工作。以下是一些。
TensorBoard
TensorBoard 是一套 Web 应用程序,用于检查、可视化和理解您的 TensorFlow 运行和图。您可以使用 TensorBoard 查看您的 TensorFlow 模型图并放大图子部分的细节。
您可以在训练运行期间绘制损失和准确率等指标;显示张量随时间变化的直方图可视化;显示其他数据,如图像;收集运行时的元数据,例如总内存使用量和节点的张量形状;等等。

opensource.com
TensorBoard 通过读取包含有关训练过程的 摘要信息 的 TensorFlow 文件来工作。您可以在运行 TensorFlow 作业时生成这些文件。
您可以使用 TensorBoard 比较训练运行、收集运行时统计信息并生成 直方图。

opensource.com
TensorBoard 特别引人入胜的功能是其 嵌入可视化工具。 嵌入 在机器学习中 无处不在,在 TensorFlow 的上下文中,通常很自然地将张量视为空间中的点,因此几乎任何 TensorFlow 模型都会产生各种嵌入。
Datalab
Jupyter 笔记本是交互式探索数据、定义 TensorFlow 模型和启动训练运行的简便方法。如果您在工作流程中使用 Google Cloud Platform 工具和产品——可能使用 Google Cloud Storage 或 BigQuery 作为数据集,或者使用 Apache Beam 进行 数据预处理——那么 Google Cloud Datalab 提供了一个基于 Jupyter 的环境,其中预装并捆绑了所有这些工具(以及 NumPy、pandas、scikit-learn 和 Matplotlib 等其他工具)以及 TensorFlow。Datalab 是开源的,因此如果您想进一步修改其笔记本环境,这很容易做到。
Facets
机器学习的力量来自于它从大量数据中学习模式的能力,因此了解您的数据对于构建强大的机器学习系统至关重要。
Facets 是最近发布的 开源数据可视化工具,可帮助您了解您的机器学习数据集,了解每个特征的形状和特征,并一目了然地看到特征之间的相互作用方式。例如,您可以查看您的训练和测试数据集(如此处对某些 人口普查 数据所做的那样)、比较每个特征的特征,并按“分布距离”对特征进行排序。

opensource.com
Cloud Datalab 包括 Facets 集成。 此 GitHub 链接 提供了一个加载 NHTSA 交通死亡 BigQuery 公共数据集 并使用 Facets 查看它的小示例。

opensource.com
在 Facets 的 Dive 视图中,我们可以快速查看哪些州交通事故死亡人数最多,并且共谋类型的分布似乎随着每次事故的死亡人数增加而变化。
还有更多…
另一个有用的诊断工具是 TensorFlow 调试器 tfdbg,它使您可以在训练和推理期间查看正在运行的 TensorFlow 图的内部结构和状态。
一旦您训练了一个您满意的模型,下一步就是弄清楚如何提供它,以便可扩展地支持对模型的预测。TensorFlow Serving 是一个用于机器学习模型的高性能服务系统,专为生产环境而设计。它 最近 已升级到 1.0 版本。
还有许多其他工具和库我们没有空间在这里介绍,但请参阅 TensorFlow GitHub 组织仓库 以了解它们。
TensorFlow 网站 有许多 入门指南、示例和 教程。(一个有趣的新教程是 这个 音频识别示例。)
2 条评论