TensorFlow教程01 诞生和发展

2015年11月的一天,Google发布了Tensorflow的白皮书并很快将Tensorflow开源。以Google的技术影响力,这个新闻在技术圈很快扩散,大家听着这个陌生的名词兴奋而又没有太多头绪。Tensor到底是什么,Tensorflow什么定位,Google为什么要将它开源...

在技术圈之外,这条消息其实并没有引起非常大的轰动,因为这个世界的消息真的太多了。那一年我还在攻读博士学位,在傍晚的周例会上,草草讲完我的控制课题进展后,我激情洋溢的给实验室的师兄弟介绍了Tensorflow,可是应者寥寥,并没有太引起大家的兴趣,有位师弟问我,这个和Matlab相比有什么优势呢。

后来事情的发展成了现象级,2016年3月AlphaGo以总比分4:1战胜韩国棋手李世石,彻底引爆了普通大众对人工智能的热情,AI技术也在加速向各行各业渗透。Tensorflow则成为一个现象级的技术名词,被普通大众所熟知。

Tensorflow的起源



在2011年,Google Brain内部孵化出一个项目叫做DistBelief,它是为深度神经网络构建的一个机器学习系统。它是一个著名的系统,虽然没有开源,但是Google研究者有大量关于它设计的论文被大家所熟知。它也被广泛应用于Google内部的科研和商业产品中。这个项目最早可以追溯到2009年,由Geoffery Hinton带领的团队开发的一个实现了广义反向传播算法的框架,基于这个框架,Google内部可以快速试验新的深度学习算法并提高算法精度。比如在使用这套框架后,Google内部语音识别的错误率降低了25%。

后来,Google决定将DistBelief打造成更加稳健、快速、通用的机器学习框架,调动了相当多的工程师和科学家投入到对DistBelief的改造,这其中就包括大名鼎鼎的Jeff Dean。有了这样的豪华开发阵容,DistBelief迅速成熟蜕变,成为一个高鲁棒和工业级的机器学习框架,这就是后来的Tensorflow。

Jeff Dean:Google Brain

作为Google内部的第二代机器学习框架,Tensorflow有了更加有趣的灵魂。它是基于DataFlow的计算模型,算子相组合形成一个计算图,计算的过程就是数据在这个计算图的节点进行计算并流动。同时,这个计算图可以被切成不同的子图,并分配到不同的Device上,包括CPU、GPU和其他的计算设备,这样天然的对分布式友好。此外,Tensorflow从一开始就被设计成运行在多个平台上,如inference可以运行在IOS和Android设备上,训练则可以运行在不同的硬件设备上。

再后来的故事就广为人知了,2015年11月9日,Google以Apache Licence 2.0的开源协议发布了Tensorflow。在这个时间点开源这样通用的机器学习框架是一个很明智的选择,可以鼓励社区和工业界围绕Tensorflow构建深度学习的整个生态。此外,社区已经开源的Caffe、Mxnet等一批优秀的机器学习框架,Google也不可以再等下去了。

Tensorflow的发展



Tensorflow在2017年2月发布了1.0.0版本,也标志着稳定版的诞生。而截至目前(2019年6月16日),Tensorflow 2.0 Beta版本也已经发布,在不久后2.0的正式版也将面世。

早期的Tensorflow也有很多被人诟病的地方,比如API的稳定性、效率和基于静态计算图的编程上的复杂性等等。然而经过这两年的优化和迭代,并吸收来自其它框架的营养(如Pytorch),Tensorflow已经某种程度上甩掉了扣在它头上的这些帽子。

易用性:目前Tensorflow已经提供不同层次的编程抽象。对于大部分深度学习算法,都可以调用Tensorflow的Keras接口或Tensorflow Estimator等高级API接口进行编程。此外,Eager模式可以让Tensorflow享受类似于Pytorch的动态图编程体验。

性能:Tensorflow经过几年的优化,在性能上已经在主流框架上处于领先的地位,其静态图的本质也能够让Tensorflow享受更多的编译优化。此外,Tensorflow的XLA编译技术能够让Tensorflow享受JIT的编译优化,极大提升其性能上升空间。Tensorflow与多种硬件加速芯片和Device的集成程度是最高的,除了主流的Nvidia GPU,还支持包括Google TPU,AMD的GPU等等。

移动端:Tensorflow在2017年5月发布了Tensorflow Lite替代原来的Tensorflow Mobile,给与移动端原生的支持。目前已经支持IOS和Android的移动端模型发布,使得AI深度学习模型能够简单、高效地部署在移动端。

WEB端:在2018年6月,Google发布了tensorflow.js,它提供与Python相近的API,用来支持深度学习模型在WEB端的发布。

可视化:Tensorflow推出通用的数据渲染服务Tensorboard,它可以生动展示训练过程状态和结果。并且它被设计成一个通用的数据层展示服务,任何框架都可以生成与Tensorboard兼容的数据格式并用Tensorboard进行展示。

分布式训练:Tensorflow从刚开始就被设计成支持分布式的训练架构,所以在出版发布不久,就退出了以参数服务器的数据并行的分布式训练架构。并且这几年在RDMA节点通信等方面做了大量优化,极大提升了分布式训练性能.

KDnuggets网站对2018年的机器学习框架的使用做过一个调查,如下图:

可以发现Tensorflow和Keras的使用率遥遥领先。另外值得注意的是,Keras是一个更上层的框架,在底层它通常也是用Tensorflow作为底层机器学习库。而且目前Tensorflow也包含了Keras的高级API接口。

Tensorflow的启示



Tensorflow在短短几年间建立了庞大的生态和影响力,非常令人吃惊。尽管这两年有一些新兴的AI框架的兴起,其中最为引人注目的就是Pytorch,可是并没有真正挑战到Tensorflow的地位。最大的原因是Tensorflow的生态非常强大,并且能提供全生命周期的深度学习服务,包括数据的预处理、训练、可视化、分布式训练、模型部署到移动端等等。它能够提供真正生产级别的模型服务,这是大部分其它的AI框架做不到的。

不过Tensorflow也有很多不完善的地方,比如API的稳定性一直被用户诟病,另外设计上的复杂性也让人对于后续的发展有一丝担心。但是办法总比困难多,相信未来Tensorflow能够很好解决这些先天和后天的问题。

原文地址:https://www.cnblogs.com/dittoyi/p/11032423.html

时间: 2024-08-26 05:35:03

TensorFlow教程01 诞生和发展的相关文章

【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

[Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感觉比较难以掌握的一个部分.Zigbee无线组网技术之所以让你感有学习难度,不是因为它真的复杂,而是它看起来很复杂,让人望而止步.另一方面则是Zigbee技术在应用层面上将硬件和软件完成融为一个体系,要求开发人员既要有扎实的硬件技术,又要有清晰的软件思维.    目前,尽管有不少关于Zigbee无线组

Node.js 教程 01 - 简介、安装及配置

目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅读本教程?

Angular系列----AngularJS入门教程01:AngularJS模板 (转载)

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

[转载]AngularJS入门教程01:静态模板

为了说明angularJS如何增强了标准HTML,我们先将创建一个静态HTML页面模板,然后把这个静态HTML页面模板转换成能动态显示的AngularJS模板. 在本步骤中,我们往HTML页面中添加两个手机的基本信息,用以下命令将工作目录重置到步骤1. git checkout -f step-1 请编辑app/index.html文件,将下面的代码添加到index.html文件中,然后运行该应用查看效果. app/index.html <ul> <li> <span>

TensorFlow教程03:针对机器学习初学者的MNIST实验——回归的实现、训练和模型评估

实现回归模型 为了用python实现高效的数值计算,我们通常会使用函数库,比如NumPy,会把类似矩阵乘法这样的复杂运算使用其他外部语言实现.不幸的是,从外部计算切换回Python的每一个操作,仍然是一个很大的开销.如果你用GPU来进行外部计算,这样的开销会更大.用分布式的计算方式,也会花费更多的资源用来传输数据. TensorFlow也把复杂的计算放在python之外完成,但是为了避免前面说的那些开销,它做了进一步完善.Tensorflow不单独地运行单一的复杂计算,而是让我们可以先用图描述一

TensorFlow教程05:MNIST深度学习初探

TensorFlow是一个非常强大的用来做大规模数值计算的库.其所擅长的任务之一就是实现以及训练深度神经网络. 在本教程中,我们将学到构建一个TensorFlow模型的基本步骤,并将通过这些步骤为MNIST构建一个深度卷积神经网络. 这个教程假设你已经熟悉神经网络和MNIST数据集.如果你尚未了解,请查看新手指南. 安装 在创建模型之前,我们会先加载MNIST数据集,然后启动一个TensorFlow的session. 加载MNIST数据 为了方便起见,我们已经准备了一个脚本来自动下载和导入MNI

python入门基础教程01 Python概述

01 Python概述 Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用.1 这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行. 目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多. 现代计算机系统简介 这里我们首先简要了解一下现代计算机的体系结构.现代计算机通常是由计算机硬

【转】BCSphere入门教程01:Immediate Alert--不错

原文网址:http://www.ituring.com.cn/article/117570 写在前面 智能硬件开发的起点是智能硬件,在本教程中的每一章节,首先会列出您的蓝牙智能硬件所需要支持的Service,请您确保硬件可以正常的读写特征值,并确认硬件功能正常.可以使用bcsphere-core-dev或者LightBlue对您的硬件进行功能的测试. 硬件最小支持 Service: Immediate AlertUUID: 00001802-0000-1000-8000-00805f9b34fb

Django搭建简易博客教程(01)-Django简介

a-terminal: 写作目的 喜欢一个学习观点以教促学, 一直以来, 学习的时候经常会发现, 某个方法某个问题自己已经明白了, 但是在教给别人的时候确说不清楚, 所以慢慢的学会了以教促学这种方法, 在教给别人知识的同时也能够提升自己对语言, 对框架的理解. 希望达到的目标: 希望能写出一个系列文章, 我也不知道到底能写多少 能够让认真阅读这个系列的文章的人, 能在读完之后做出一个简单的博客 希望能够加深自己对Django的理解 Django简介 Django是Python中目前风靡的Web