TensorFlow评述:最佳深度学习库,且仍在不断演进

TensorFlow评述:最佳深度学习库,且仍在不断演进

如果大家去年关注过TensorFlow深度学习框架,就会发现其上手难度很高且成熟度有限。但如今,这套由谷歌打造的方案已经彻底改头换面。

自从2016年10月评测TensorFlow r0.10版本以来,谷歌的这套开源深度学习框架已经变得更为成熟,实现了更多算法与部署选项,且编程难度也大大降低。TensorFlow如今已经迎来r1.4.1版本(稳定版本与Web说明文档)、r1.5版本(候选发行版)以及预发布r1.6版本(主分支与每日构建版本)。

TensorFlow项目可谓极具活力。粗略计算来看,GitHub上的TensorFlow库目前拥有2.7万项提交,8.5万颗星评以及4.2万个fork。这些数字令人印象深刻,且直观反映出人们对于TensorFlow项目的高度关注——甚至超越了Node.js库的人气。相比之下,由Amazon公司支持的另一套竞争性框架MXNet则活跃度相对较低:提交量不足7000条,星廉政约为1.3万颗,fork则不足5000。2017年2月TensorFlow r1.0版本发布时的另一项统计数据显示,TensorFlow目前在超过6000个在线开源代码库当中得到使用。

在今天的评测当中,我将集中讨论截至2018年1月的TensorFlow发展现状,同时展示去年其新增的各项重要功能。

TensorFlow功能

TensorFlow能够实现手写数字分类、图像识别、单词嵌入、递归神经网络、序列到序列机器翻译模型、自然语言处理以及基于PDE(即偏微分方程)模拟。另外,其还支持CPU与英伟达GPU。sequence-to-sequence项目可运行在Ubuntu Linux、MacOS、Android、iOS以及Windows(运行效果远超以往)之上。其亦可支持配合训练当中所使用的模型实现规模化生产性预测,且灵活性更高。再有,其仍然保留了自动微分功能、在TensorBoard中提供一款模型可视化工具,并为Python语言提供最佳支持效果(抱歉了,R与Scala程序员们)。

自r0.10版本以来,TensorFlow陆续发布了众多改进、增强以及额外功能,同时亦修复了各种bug。下面我将选择其中一些重点问题作出说明——举例来说,各版本升级了对CUDA及cuDNN库的支持,并采用最新英伟达GPU优化代码以提升性能。另外,其还实现了DHFS(Hadoop文件系统)支持能力,Windows实现效果提升,并迎来新的求解器与更好的Go支持性。经过几个月的期待,TensorFlow图形性能改进方案XLA(一款专用编译器)与一款TensorFlow调试器得以发布。与此同时,TensorFlow项目还获得了与PyPl以及pip等标准Python基础架构的更佳对接能力,亦能够契合在科学计算领域得到广泛使用的NumPy工具包。

我们还看到RNN(常用于自然语言处理类递归神经网络)支持能力以及新的英特尔MKL(数学内核库)集成能力,这显著提升了CPU在深度学习领域的性能表现。在编程易用性方面,内置估算器(预定义模型层)被添加至为当中,其中包括多款回归器与分类器。TensorFlow中新增的多套库可用于统计分布、信号处理基元以及图像的可微分重新采样。作为TensorFlow的一套特定实现方案,Keras(提供专门的高级神经网络API,亦可运行在MXNet、Deeplearning4j、微软Cognitive Tooltit以及Teano之上)被开发出来。社区开发进程显示,其目前已经能够提供出色的实效——多个相关贡献模块已被纳入内核库,另有一套服务器库可实现生产部署优化。

TensorFlow项目迎来一套训练数据集库,且可实现向下兼容;这一切对用于开发标准训练数据集的新模型而言非常重要。此外,Java支持能力已经实现并得到多次强化。最后,在TensorFlow r 1.5当中,急切执行(一个实验性接口,可令TensorFlow实现对NumPy等命令式编程风格的支持)与TensorFlow Lite(面向移动与嵌入式设备实现预测能力)的预览版本正式到来。

TensorFlow安装

总的来说,TensorFlow的安装方式已经得到了明显改善。与以往一样,TensorFlow仍然提供多种安装方法,包括使用Python虚拟环境、“原生”pip、Docker以从来源处构建。TensorFlow团队建议使用虚拟环境进行安装; 我个人则选择使用“原生”pip,因为我之前将其安装在自己的MacBook Pro上,我可不希望在磁盘空间不足以处理麻烦的卸载工作。

TensorFlow评述:最佳深度学习库,且仍在不断演进

IDG

为Mac安装一套TensorFlow每晚构建版本,这是一种相对较新的安装选项,且运行效果良好。在安装/升级之后,我以交互方式对其标准TensorFlow功能进行了测试。

除了各发行版本的二进制文件外,TensorFlow团队现在还为Linux、Mac以及Windows提供每晚构建主分支的二进制代码。使用以下命令即可轻松在Mac上进行每晚安装:

sudo pip install tf-nightly 

尽管目前的master分支文档声称,这三个平台的CPU与GPU库版本皆拥有每晚构建资源,但我无法使用Mac-pip找到并安装Mac平台的GPU版本。根据我的经验,Mac GPU版本应该会尝试进行安装,但始终无法成功; 直到r 1.2版本时,Mac GPU版本被正式放弃。我不太确定r1.6版本是否有计划恢复Mac GPU版本,或者说TensorFlow团队发布的每晚构建说明文档中存在错误。无论如何,在不改变当前安装条件的前提下,目前的GPU版本快速安装效果确实比以往更好。

尽管如此,MacBook Pro显然并不是利用TensorFlow进行深度学习模型训练的理想设备。您可以使用包含一个或者多个新型高端英伟达GPU的Linux设备达成更出色的效果。此外,您也可以花个几千美元组装出自己的深度学习专用PC。如果您只是偶尔需要进行模型训练,则可在AWS、Azure、Google Compute Engine或者IBM Cloud上轻松利用配备GPU的实例运行TensorFlow。

使用TensorFlow

一年之前,TensorFlow项目主要存在两个问题——难于学习,而且代码编写量太大。如今,这两个问题都已经得到了解决。

为了简化TensorFlow的学习门槛,TensorFlow团队制作出更多学习资料,同时改进了现有入门教程。另外,亦有一些第三方推出自己的TensorFlow教程。此外,目前已经付梓出版的TensorFlow书籍亦所在多有,外加一系列大线TensorFlow课程。大家甚至可以关注斯坦福大学的TensorFlow for Deep Learning Research(CS 20)课程,其在线提供全部演示文稿与讲义内容。

TensorFlow库中的几个新增部分还开始提供编码要求更低的模型创建与训练接口。其中包括tf.kera,其提供引擎中立Keras工具包的一套纯TensorFlow版本,外加负责提供多种高级模型处理功能的tf.estimator——可用于线性的回归器与分类器、深层神经网络(简称DNN)、线性与DNN结合,外加一个可用于建立自有估算器的基类。此外,Dataset API允许用户立足简单且可复用的片段构建复杂的输入管道——意味着大家不再需要被迫选择其一。正如TensorFlow-Keras教程中所言,您可以轻松将tf.keras、tf.data.dataset以及tf.estimator配合使用。

TensorFlow Lite

TensorFlow Lite目前正处于开发者预览阶段,属于TensorFlow的一套轻量化版本,能够运行在移动与嵌入式设备当中,从而以低延迟与低资源需求实现设备上的机器学习推理(但无法进行训练)。TensorFlow Lite还支持Android Neural Networks API的硬件加速机制。TensorFlow Lite模型非常小巧,足以运行在移动设备之上,甚至可以支持离线用例。

TensorFlow评述:最佳深度学习库,且仍在不断演进

IDG

TensorFlow Lite允许小巧的神经网络模型运行在Android与iOS设备之上,甚至能够实现脱机执行。该库目前仍处于开发者预览阶段,且不保证向上或向下兼容性。

TensorFlow Lite的基本思路在于,当用户训练出一套完整的TensorFlow模型,并将其转换为TensorFlow Lite格式之后,即可在Android或iOS上的移动应用当中使用转换得到的文件。

当然,大家也可以利用经过预告训练的TensorFlow Lite模型实现图像分类或智能答复。智能答复会利用上下文信息提供高相关性消息,其在本质上与谷歌在Gmail客户端当中提供的回复预测功能完全一致。

另一个使用方式选项则是利用新的标记数据集对现有模型进行重新训练,这将显著降低训练时间。

TensorFlow Serving

TensorFlow Serving是一套灵活且性能出色的服务系统,专门面向机器学习模型且适用于生产环境。其不仅能够提供单一模型,您亦可配同时使用servables的多个版本,且客户端将直接使用最新版本或者根据特定版本ID调用特定模型——这将显著简化您尝试新型算法的实验过程。

您也可以将复合模型表示为多个独立servables或单一复合servables。对servables的访问由sources控制,而sources能够从任意存储系统当中发现servables。

TensorFlow Eager

急切执行为TensorFlow 推出的一个实验性接口,提供类似于NumPy的命令式编程风格。当您启用急切执行功能时,TensorFlow 操作将立即得到执行——意味着您无需使用Session.run()来执行预先构建的图形。

这种办法能够有效简化TensorFlow矩阵运算与模型代码,不过其目前尚不提供具备向上与向下兼容性保证的预览/前置版本。相较于运行会话,急切执行也将有效简化TensorFlow代码的调试流程。

急切执行兼容NumPy数组、GPU加速、自动微分以及在tf.layers模块中使用的Keras风格Layer类。您可以发布摘要并在TensorBoard中使用,但需要使用summary类的一套全新分布式版本。急切执行说明文档中警告称,“在分布式与多GPU训练以及CPU性能方面,我们仍在积极工作以实现支持。”

TensorFlow与其它竞争对手

总体而言,TensorFlow始终处于机器学习与深度学习框架的前沿。正如之前所提到,过去一年以来,TensorFlow已经在性能、部署、易学易用性、编程简易性以及对常见Python库及实用程序的兼容性等方面迎来巨大提升。

不过就在同一时段之内,其它作为竞争对手的深度学习框架也在不断改进。MXNet已经被纳入Apache基金会麾下,且在功能与性能方面实现改进。微软Cognitive Toolkit亦在多方面取得进展,包括实现对Keras以及TensorBoard的支持能力。Facebook公司的Caffe2是对Caffe的一次重要改写,其在图像处理卷积网络当中增加了递归与LSTM(长短期记忆)网络支持。

开源H2O.ai预测引擎凭借着优秀的专有超参数调整与功能工程层得到强化,并迎来了资源消耗极高但却物有所值的特征工程层Drverless AI。Scikit-learn继续在其专长的机器学习(而非深度学习)领域顺利发展。对于已经在使用Spark且不需要训练深层神经网络的用户而言,Spark MLlib也是个很好的选择。

只要您拥有TensorFlow编程所必需的技能储备,那么TensorFlow绝对是您进行深度学习模型构建、训练以及生产的绝佳选择。但如果您刚刚接触TensorFlow,请首先尝试tf.keras、tf.data.dataset以及tf.estimator提供的高级API。如果需要更低级的API,您可能先得提升对这套平台的熟悉度,而后方可顺畅使用。

使用成本:基于Apache Licesne 2.0版本的自由开源项目。

适用平台:推荐使用Ubuntu 14.04+、MacOS 10.11+、Windows 7+、英伟达GPU与CUDA。大多数云方案现在支持TensorFlow与英伟达GPU配合使用。TensorFlow Lite可立足Android与iOS设备运行预训练模型。

项目总览

TensorFlow r1.5:谷歌公司的这套深度学习开源框架已经愈发成熟、可实现更多算法与部署选项,且编程难度亦有所下降。

优势:

  • 多种模型与算法
  • 配合GPU或TPU硬件实现出色的性能表现
  • 对Python提供良好支持,且现在可与NumPy顺利集成
  • 出色的说明文档
  • 提供优秀的计算网络图形显示软件

缺点:

  • 仍然难于学习,但难度较此前有所下降
  • 对Java、C以及Go语言的支持落后于Python
  • 不支持R或Lua语言

原文链接:https://www.infoworld.com/article/3250165/machine-learning/tensorflow-review-the-best-deep-learning-library-gets-better.html

相关推荐