Tensorflow:谷歌的一种深度学习框架/丹炉 | 炼丹术 | 干货分享 | 解读技术

2020-08-04 11:55:00 浏览数 (1)

懒人阅读:想要傻瓜式体验深度学习的请先绕开TF,可以考虑pytorch、keras。想要真正从事可部署产品研发的童鞋,TF可能是一个绕不开的存在。


写在前面:引用并发挥大神们关于机器学习/深度学习/人工智能的话:

训练AI模型就是炼丹,金丹就是训练出来的模型,可以针对某种问题输出极佳的结果;框架是丹炉;丹方就是模型的设计思路、结构和方法;炼丹的材料就是数据。

炼丹过程就是按照丹方,使用框架和数据训练模型的过程,不同级别的“丹药”对于问题的解决程度不同,越厉害的丹药当然能够越精确高效的解决问题。


为什么要了解Tensorflow?

Tensorflow是目前唯一 一个在核心设计层面上支持dynamic control flow的框架,也是极少几个经历大规模多应用部署考验的的框架之一。谷歌一开始的野心从中也可看出一二,让人不禁联想到Android。TF目前处于快速迭代的过程中,虽然开源、资源多、维护活跃,但是也存在了各种文档、接口和版本混乱的问题,但相信谷歌在AI上的决心和行动,目前很多人已经开始在最底层的TF基础上开发更加易读易调试的高层封装模块了,从一个平台级软件的发展来看,目前的问题都将得到很好的解决。

优点

  • 无缝对接Python,BUT大多数深度学习框架都可以
  • 能够很容易部署到服务器上和移动端,这是很多框架做不到的
  • 足够灵活,非常底层,也有上层封装,尤其是更新很快,社区非常活跃,这当然离不开谷歌的大力推动,不禁联想到Android
  • 大量优秀的项目正在使用TensorFlow
  • 可以在多个CPU和GPU下并行

人无完人,缺点

  • 官方文档及API文档残废,普遍反应逻辑不亲民,稍显混乱
  • 据说默认占用所有GPU的所有内存,显存占用也不低,对硬件要求不低
  • 版本乱、版本之间的兼容性问题大
  • 由于偏底层,接口编写难度大,调试也困难

如果认可上一条,请继续阅读Tensorflow简介

TensorFlow主要是由Google Brain团队开发用于机器学习和深度神经网络研究开发,是一个使用数据流和图来做数值计算的开源软件平台,可广泛应用于各个领域的开发部署。

其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

TF使用graph表示计算流程。图中的节点称为操作(Operation,以下简称OP)。每个OP接受0到多个Tensor,执行计算,输出0到多个Tensor。图是对计算流程的描述,需要在Session中运行。Session将计算图的OP分配到CPU或GPU等计算单元,并提供相关的计算方法,并且会返回OP的结果。

看到这里可能有些人会懵,简单说就是用画图的方式设计算法结构及流程,然后明确各个模块的计算方法,然后数据就会按照设计的方式一步步流动,直至输出结果。就像设计了一种结构的管道,数据就像液体一样在管道中流动,最终以一种形式输出

TF的几个要素:

张量(Tensor)

TF使用Tensor表示所有数据, 计算图中, 操作间传递的数据都是 tensor。

变量(Variable)

在训练模型时,Variable被用来存储和更新参数。变量维护图执行过程中的状态信息。

Feed

TensorFlow除了可以使用Variable和Constant引入数据外,还提供了Feed机制实现从外部导入数据。

Fetch

为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果。


使用方法及示例

TF程序实现主要有两个过程:图的构建和图的执行。

  • 图的构建

构建图的第一步,是创建源OP(source op),源操作不需要任何输入,例如常量(constant),源操作的输出被传递给其它操作做运算。TensorFlow Python库有一个默认图 (default graph),OP构造器可以为其增加节点。这个默认图对许多程序来说已经足够用了。

  • 图的执行

要执行计算图,首先需要创建Session对象,如果不提供参数,Session构造器将运行默认图。Session结束后,需要关闭以释放资源。用户也可以使用with控制语句自动关闭会话。

  • 示例

TF实现CNN的一个栗子,用TF构建一个识别手写数字的CNN网络。

CNN基本结构

识别手写体,模型输入

输出,即对手写数字的识别结果,基本均能准确判断

代码及详细说明传送门:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/convolutional_network.ipynb


安装及注意事项

TF的安装有Pip, Docker, Virtualenv, Anaconda 或 源码编译等多种方法。具体参见极客学院的安装详细说明(含下载地址),传送门:http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/os_setup.html

0 人点赞