tensorflow核心概念和原理介绍

作者: 单机闯关小游戏  发布:2019-08-30

关于 TensorFlow

TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。

节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。

TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

图片 1

核心概念:数据流图

数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。

“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。

“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。

tensorflow核心概念和原理介绍。张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

图片 2

tensorflow核心概念和原理介绍。更详细的介绍可以查看tensorflow中文社区:

TensorFlow主要是由计算图、张量以及模型会话三个部分组成。

1.1 TensorFlow概要

TensorFlow是Google公司开源的分布式机器学习框架。它的前身是DistBelief,在Google大规模内部使用。TensorFlow最早由Google Brain研究组发起。

官网:tensorflow核心概念和原理介绍。http://www.tersorflow.org
Github网址:https://github.com/tensorflow/tensorflow
模型仓库网址:https://github.com/tensorflow/models

计算图

在编写程序时,我们都是一步一步计算的,每计算完一步就可以得到一个执行结果。

在TensorFlow中,首先需要构建一个计算图,然后按照计算图启动一个会话,在会话中完成变量赋值,计算,得到最终结果等操作。

因此,可以说TensorFlow是一个按照计算图设计的逻辑进行计算的编程系统。

TensorFlow的计算图可以分为两个部分:
tensorflow核心概念和原理介绍。(1)构造部分,包含计算流图;(2)执行部分,通过session执行图中的计算。

构造部分又分为两部分:
(1)创建源节点;(2)源节点输出传递给其他节点做运算。

TensorFlow默认图:TensorFlow python库中有一个默认图(default graph)。节点构造器(op构造器)可以增加节点。

tensorflow核心概念和原理介绍。TensorFlow关键版本发布历史

  • 2015.11.09 在Github上开源(Ver0.5.0)
  • 2015.12.10 支持Python3.3 ,GPU性能提升...(Ver0.6.0)
  • 2016.02.17 支持GPU使用Cuda7.0 、cuDNN R2 、cuDNN R4等运算加速库...(Ver0.7.0)
  • 2016.04.30 通过gRPC实现分布式计算...(Ver0.8.0)
  • 2016.06.28 支持Python3.5,支持iOS,支持Mac电脑上的GPU计算...(Ver0.9.0)
  • 2016.09.13 添加C shape inference,添加graph-construction C/C (大部分) Api...(Ver0.10.0)
  • 2016.11.11 支持cuDNN 5、Cuda8.0,HDFS...(Ver0.11.0)
  • 2016.12.21 支持Windows环境运行,cuDNN 5.1...(Ver0.12.0)
  • 2017.02.16 发布正式版(Ver1.0.0)
  • 2017.04.27 支持Windows下的Java Api...(Ver1.1.0)
  • 2017.06.15 支持Windows下的Python 3.6...(Ver1.2.0)

张量

在TensorFlow中,张量是对运算结果的引用,运算结果多以数组的形式存储,与numpy中数组不同的是张量还包含三个重要属性名字、维度、类型。

张量的名字,是张量的唯一标识符,通过名字可以发现张量是如何计算出来的。比如“add:0”代表的是计算节点"add"的第一个输出结果。维度和类型与数组类似。

前端API支持语言

  • Python (推荐使用,API最全面)
  • C
  • Go
  • Java
  • Rust
  • Haskell
  • 非官方(Julia、Javascript、R)

模型会话

用来执行构造好的计算图,同时会话拥有和管理程序运行时的所有资源。

当计算完成之后,需要通过关闭会话来帮助系统回收资源。

在TensorFlow中使用会话有两种方式。第一种需要明确调用会话生成函数和关闭会话函数

import tensorflow as tf 

# 创建session  
session = tf.Session()  
#获取运算结果  
session.run()  
#关闭会话,释放资源  
session.close()  

第二种可以使用with的方式

with tf.Session() as session:  
    session.run()  

两种方式不同的是,第二种限制了session的作用域,即session这个参数只适用于with语句下面,同时语句结束后自动释放资源,
而第一种方式session则作用于整个程序文件,需要用close来释放资源。

运算操作硬件

  • CPU: Linux, Mac, Windows, Android, iOS
  • GPU: Linux, Mac, Windows
  • TPU: Tensor Processing Unit(Google专门为大规模深度学习计算定制的芯片,内部使用,AlphaGo采用)

tensorflow分布式原理

tensorflow的实现分为了单机实现和分布式实现。

单机的模式下,计算图会按照程序间的依赖关系顺序执行。

在分布式实现中,需要实现的是对client,master,worker process,device管理。

client也就是客户端,他通过session的接口与master和worker相连。

master则负责管理所有woker的计算图执行。

worker由一个或多个计算设备device组成,如cpu,gpu等。

具体过程如下图:

图片 3

在分布式实现中,tensorflow有一套专门的节点分配策略。

策略是基于代价模型,代价模型会估算每个节点的输入,输出的tensor大小以及所需的计算时间,然后分配每个节点的计算设备。

应用场景

  • 语音识别
  • 自然语言处理
  • 计算机视觉
  • 机器人控制
  • 信息抽取
  • 药物研发
  • 分子活动预测
  • ...

扩展功能

在tensorflow中比较重要的拓展功能有,自动求导,子图执行,计算图控制流以及队列/容器

求导是机器学习中计算损失函数常用的运算,TensorFlow原生支持自动求导运算,它是通过计算图中的拓展节点实现。

子图执行是通过控制张量的流向实现。

计算图控制流:是指控制计算图的节点极其运行的设备管理,它提供了快速执行计算和满足设备施加的各种约束。比如限制内存总量为了执行它的图子集而在设备上所需的节点。

队列是一个有用的功能,它们允许图的不同部分异步执行,对数据进行入队和出队操作。

容器是用来存放变量,默认的容器是持久的,直到进程终止才会清空,同时容器中的变量也可以共享给其他计算图使用。

详细的细节可查看TensorFlow的介绍pdf

其他

  • 编程模型:Dataflow-like model(数据流模型)
  • 部署:一套代码,全平台运行
  • 运行模式:单机、分布式
  • 数学表达:Math Graph Expression(数学计算图表达)、Auto Differentiation(自动微分)
  • 平台支持:Google Cloud Platform、Hadoop File System

1.2 TensorFlow编程模型简介

TensorFlow的计算可以表示为一种有向图(directed graph),或者称计算图(computation graph)。图中每一个运算操作(operation)是一个节点(node),节点之间的连接线称为边(edge)。计算图中的节点可以有任意多个输入和任意多个输出,每个节点都只有一个运算操作。在计算图中流动(flow)的数据被称为张量(tensor),故得名TensorFlow。

计算图示例

图片 4

import tensorflow as tf
b=tf.Variable(tf.zeros([100]))      # 生成100维的向量,初始化为0
W=tf.Variable(tf.random_uniform([784,100],-1,1))    # 生成784x100的随机矩阵W
x=tf.placeholder(name="x")      # 输入的Placeholder
relu=tf.nn.relu(tf.matmul(W, x) b)  # ReLU(Wx b)
C=[...]         # 根据ReLU函数的结果计算Cost
s=tf.Session()
for step in range(0, 10):
    input=...construct 100-D input array... # 为输入创建一个100维的向量
    result=s.run(C, feed_dict={x: input})   # 获取Cost,供给输入x
    print(step, result)

Session是用户使用TensorFlow时交互的接口。Session可以通过Extend方法添加节点(node)和边(edge)。Variable是一类特殊的运算操作,可以将tensor存储在内存或显存中。

本文由bg游戏资讯发布于单机闯关小游戏,转载请注明出处:tensorflow核心概念和原理介绍

关键词: 其他分类 人工智能 python 算法&数据模型 t

上一篇:没有了
下一篇:没有了