Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

TensorFlow

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

来源:维基百科
简介

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。TensorFlow于2015年11月9日在Apache 2.0开源许可证下发布。

TensorFlow的特征

高度的灵活性

TensorFlow不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用Tensorflow。你来构建图,描写驱动计算的内部循环。他们提供了有用的工具来帮助你组装“子图”(常用于神经网络),当然用户也可以自己在Tensorflow基础上写自己的“上层库”。定义顺手好用的新复合操作和写一个python函数一样容易,而且也不用担心性能损耗。当然万一你发现找不到想要的底层数据操作,你也可以自己写一点c++代码来丰富底层的操作。

真正的可移植性(Portability)

Tensorflow在CPU和GPU上运行,比如说可以运行在台式机、服务器、手机移动设备等等。Tensorflow可以办到在没有特殊硬件的前提下,在你的笔记本上跑一下机器学习。不想修改代码的情况下,训练模型在多个CPU上规模化运算。可以将你的训练好的模型作为产品的一部分用到手机app里。Tensorflow可以办到这些。tensorfow也能办到将你的模型作为云端服务运行在自己的服务器上,或者运行在Docker容器里。

将科研和产品联系在一起

过去如果要将科研中的机器学习想法用到产品中,需要大量的代码重写工作。但是在Google,科学家用Tensorflow尝试新的算法,产品团队则用Tensorflow来训练和使用计算模型,并直接提供给在线用户。使用Tensorflow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。

自动求微分

基于梯度的机器学习算法会受益于Tensorflow自动求微分的能力。作为Tensorflow用户,你只需要定义预测模型的结构,将这个结构和目标函数(objective function)结合在一起,并添加数据,Tensorflow将自动为你计算相关的微分导数。计算某个变量相对于其他变量的导数仅仅是通过扩展你的图来完成的,所以你能一直清楚看到究竟在发生什么。

多语言支持

Tensorflow有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs。你可以直接写python/c++程序,也可以用交互式的ipython界面来用Tensorflow尝试些想法,它可以帮你将笔记、代码、可视化等有条理地归置好。当然这仅仅是个起点——我们希望能鼓励你创造自己最喜欢的语言界面,比如Go,Java,Lua,Javascript,或者是R。

性能最优化

比如说你有一个32个CPU内核、4个GPU显卡的工作站,想要将你工作站的计算潜能全发挥出来?由于Tensorflow给予了线程、队列、异步操作等以最佳的支持,Tensorflow让你可以将你手边硬件的计算潜能全部发挥出来。你可以自由地将Tensorflow图中的计算元素分配到不同设备上,Tensorflow可以帮你管理好这些不同副本。

[出处:tensorflow, URL: https://www.tensorflow.org/]

例子

1,

importtensorflowastfhw = tf.constant("Hello World")with tf.Session() assess:sess.run(hw)

2.

import tensorflow as tfb = tf.Variable(tf.zeros([100])) # 100-d vector, init to zeroesW = tf.Variable(tf.random_uniform([784,100],-1,1)) # 784x100 matrix w/rnd vals x = tf.placeholder(name="x") # Placeholder for input relu = tf.nn.relu(tf.matmul(W, x) + b) # Relu(Wx+b)C = [...] # Cost computed as a function # of Relus = tf.Session()for step in xrange(0, 10): input = ...construct 100-D input array ... # Create 100-d vector for input result = s.run(C, feed_dict={x: input}) # Fetch cost, feeding x=input print step, result

这是案例二代码的运行流程图

发展历史

描述

从2010年开始,Google Brain建立DistBelief作为他们的第一代专有的机器学习系统。50多个团队在Google和其他Alphabet公司在商业产品部署了DistBelief的深度学习神经网络,包括Google搜索、Google语音搜索、广告、Google相册、Google地图、Google街景、Google翻译和YouTube。Google指派计算机科学家,如Geoffrey Hinton和Jeff Dean,简化和重构DistBelief的代码库,使其变成一个更快、更健壮的应用级别代码库,形成了TensorFlow。2009年,Hinton领导的研究小组大大减少使用DistBelief的神经网络的错误数量,通过Hinton在广义反向传播的科学突破。最值得注意的是,Hinton的突破直接使Google语音识别软件中的错误减少至少25%。

【出处:wiki, URL: https://zh.wikipedia.org/wiki/TensorFlow

谷歌于2015年11月发布了全新系统。该系统可被用于或照片识别等多项机器领域,主要针对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部、大到数千台数据中心服务器的各种设备上运行。

2016年4月14日,Google发布了分布式TensorFlow,版本号为0.8,这是TensorFlow发布之后的比较重大的版本更新。Google的博文介绍了TensorFlow在图像分类的任务中,在100个GPUs和不到65小时的训练时间下,达到了78%的正确率。在激烈的商业竞争中,更快的训练速度是人工企业的核心竞争力。而分布式TensorFlow意味着它能够真正大规模进入到人工智能产业中,产生实质的影响。

在2016年6月,TensorFlow发布了新版本的早期版本,版本号为0.9,增加了对iOS的支持。随着谷歌增加了TensorFlow对iOS的支持,应用程序将能够在更聪明的功能集成到它们的应用程序,最终使它们更聪明相当能干。

2017年1月初,谷歌公布了TensorFlow 1.0.0-alpha,即TensorFlow 1.0的第一个“草稿”版本。近日,新的候选版本TensorFlow 1.0.0-rc0被发布出来,披露了更多技术细节,标志着我们离“完全体”的TensorFlow 1.0更近一步。

2017年2月15日晚,谷歌在加州山景城举办史上第一届TensorFlow开发者峰会。在揭幕的TensorFlow开发者峰会上,谷歌正式发布了TensorFlow1.0版本。

1.0版本不仅为TensorFlow机器学习函数库带来多重升级,而且为Python和Java用户使用TensorFlow做开发降低了难度。另外,新版本的修补也得到了改善。更有意思的是,由于对TensorFlow计算做优化的新编译器,在智能手机上运行基于TensorFlow的机器学习APP将成为可能。在2017年1月底,TensorFlow终于将迎来史上最重大更新:TensorFlow 1.0。Tensorflow它已成为GitHub最受欢迎的开源项目。因其高度普及率,尤其是在Python生态圈中,TensorFlow的功能变化会对全世界的机器学习.

2017年5月Google宣布从Android Oreo开始,提供一个专用于Android开发的软件栈TensorFlow Lite

2016年5月,Google宣布了张量处理单元(TPU),一个专为机器学习和TensorFlow定制的ASIC。TPU是一个可编程的AI加速器,提供高吞吐量的低精度计算(如8位),面向使用或运行模型而不是训练模型。Google宣布他们已经在数据中心中运行TPU长达一年多,发现它们对机器学习提供一个数量级更优的每瓦特性能.

2017年5月Google宣布第二代张量处理单元,并在Google Compute Engine中可用。第二代TPU提供最高180 teraflops性能,组装成64个TPU的集群时提供最高11.5 petaflops性能。

【出处:web, URL: https://www.aizqx.com/aicode/606.html

主要事件


A

B

C

1

年份

作者

论文

2

2016

Abadi, M.,介绍一种机器学习系统TensorFlow

Abadi, M., Barham, P., Chen, J., Chen, Z., Davis, A., Dean, J., ... & Kudlur, M. (2016, November). TensorFlow: A System for Large-Scale Machine Learning. In OSDI (Vol. 16, pp. 265-283).

3

2016

Abadi, M.,TensorFlow谷歌机器学习白皮书

Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., ... & Ghemawat, S. (2016). Tensorflow: Large-scale machine learning on heterogeneous distributed systems. arXiv preprint arXiv:1603.04467.

[描述来源:Wikipedia;URL: https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software]

发展分析

瓶颈

  • 底层接口写起来繁琐,高层接口又不灵活,tensorflow的高层封装很多,稍显杂乱。
  • 速度上与MXnet相比,稍慢。
  • 作为静态图框架,调试困难。
  • 缺乏良好的输入通道。只有TensorFlow的1.4预览版中有一些还算不错的输入通道。Dataset API现支持预抓取,这对于在训练或推理时提高GPU的通量有很大帮助。然而,这也同样容易导致系统进入锁定状态。此外,tensorflow没有文档或案例来展示有效的输入通道。

【来源:知乎,URL:https://www.zhihu.com/question/63342728

未来发展方向

引用余凯先生之前在采访中说过的话:“尽管这个平台目前是开源的,但是随着时间的推移,人工智能变得越来越强大,这个系统会变得极端复杂到失去透明性,而且会很可怕的变成全世界数据,计算,硬件,编译器等的标准制定者。这样会导致一个不健康的生态,阻碍年轻人掌握技术的自由,让个人,公司甚至国家在人工智能领域的自主发展,最终被一家商业公司所控制。这不是危言耸听。可惜现在绝大部分人都还意识不到这点。尤其是在中国。Caffe,Mxnet等是更加开放的开源系。”

【来源:SOHU, URL: http://www.sohu.com/a/126453774_297710】

以下是几个深度学习框架的对比,更多对比看URL:https://en.wikipedia.org/wiki/Deep_belief_network


A

B

C

D

E

F

G

H

I

J

1

软件名

创建人

认证方

接口

OpenMP支持

OpenCL支持

符号框架支持

命令框架支持

递归神经网络

平行计算

2

caffe

Berkeley Vision and Learning Center

BSD license

Python, MATLAB

Yes

在开发

Yes

No

Yes

?

3

caffe2

Facebook

Apache 2.0

Python, MATLAB

Yes

在开发

Yes

No

Yes

Yes

4

TensorFlow

Google Brain team

Apache 2.0

Python (Keras), C/C++, Java, Go, R

No

Yes

Yes

No

Yes

Yes

5

MXnet

Distributed (Deep) Machine Learning Community

Apache 2.0

C++, Python, Julia, Matlab, JavaScript, Go, R, Scala, Perl

Yes

在规划

Yes

Yes

Yes

Yes

6

Theano

Université de Montréal

BSD license

Python (Keras)

Yes

在开发

Yes

No

Yes

Yes

Contributor: Ruiying Cai

简介