G
人工智能A7论坛 >> Tensorflow和深度学习笔记_论坛版 >> 2.基本概念和架构

2.1 基本概念

1标量、矢量、张量

Tensor:张量

张量概念是矢量概念的推广,矢量是一阶张量。张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。

 

经典的方法把张量视为多维数组,它们是标量,1维向量和2维矩阵的n维推广。

矢量可以从1维向量的角度看待。

源码中  写明了就是N维数组

    /// @ingroup core

 42 /// Represents an n-dimensional array of values.

 43 class Tensor {

...}

 

tensorflow/core/framework/tensor.h 

 

 

 

Tensor的类型

包括 8bit64bit, signedunsignedIEEE float/doublecomplex number

 

2)Graph的构成

Graphtensorflow中最核心的一个概念。

图的构成要素:节点、边

节点:Op 

    英文名:operation  中文名:算子

    

列表:

类别

例子

单个元素数学计算

Add, Sub, Mul, Div, Exp, Log, Greater, Less

Array操作

Concat, Slice, Split, Constant, Rank, Shape…

矩阵操作

MatMul, MatrixInverse, MatrixDeterminant…

状态操作

Variable, Assign, AssignAdd…

神经网络操作

SoftMax, Sigmoid, ReLU, Convolution2D…

检查点操作

Save, Restore

队列和同步操作

Enqueue, Dequeue, MutexAcquire…

控制流操作

Merge, Switch, Enter, Leave…

 

变量(tf.Variable也是算子,不过参数是在图中有其固定的位置的,不能像普通数据那样正常流动。因此被实现为一种特殊的算子。

边:正常边、特殊边

正常边:tensor 可以流动数据的边;

特殊边:节点之间的依赖关系;

可以让起始节点执行完再执行目标节点,比如起到限制内存峰值的作用

      // Add an edge that connects the xth output of "source" to the yth input

314   // of "dest".

315   const Edge* AddEdge(Node* source, int x, Node* dest, int y);

316 

317   // Add a control-edge (no data flows along this edge) that

318   // connects "source" to "dest".

319   const Edge* AddControlEdge(Node* source, Node* dest) {

320     return AddEdge(source, kControlSlot, dest, kControlSlot);

321   }

 

tensorflow/core/graph/graph.h

 

在源码中

Graph用是class来定义,Subgraph用的是namespace.

How Data flows (用浏览器查看动态图片)

 

关系:

    一个 op 获得 个或多个 Tensor, 执行计算产生 个或多个 Tensor.

 

 

3)会话(tf.Session

会话可以理解为graph的一个生命周期。开启一个会话,就会新建一个空的图。在会话中添加节点和边,形成一张图,然后执行。

没有session的环境,graph不能执行。

源码注释的说法:

 A Session instance lets a caller drive a TensorFlow graph computation

 session.close()  会释放session在 TensorFlow runtime中使用的资源

Session是一个class,其中封装了sessionCreateExtendclose等操作。

为什么必须有个session?实际上是提供给程序员的接口

 

思考:

当我把tensorflow训练好的模型保存到本地的时候 需要保存哪些信息