tensorflow实战google深度学习框架学习笔记(第三章)
tensorflow实战一、Tensorflow计算模型——计算图计算图是Tensorflow中最基本的一个概念。Tensorflow中所有计算都会被转化为计算图上的结点。1.1计算图概念Tensorflow——可以拆分为:tensor与flow。tensor(张量):可以简单理解为多维数组flow(流):表达了张量之间通过计算相互转化的过程。Tensorflow实际上是一个计算图的形式来表达计算
tensorflow实战
一、Tensorflow计算模型——计算图
计算图是Tensorflow中最基本的一个概念。Tensorflow中所有计算都会被转化为计算图上的结点。
1.1计算图概念
Tensorflow——可以拆分为:tensor与flow。
tensor(张量):可以简单理解为多维数组
flow(流):表达了张量之间通过计算相互转化的过程。
Tensorflow实际上是一个计算图的形式来表达计算的编程系统。Tensorflow中的每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的依赖关系。

例图:图中的每一个节点都是一个运算,而每一条边代表了计算之间的依赖关系,如果一个运算依赖于另一个运算的输出,即可说明两个运算有依赖关系。
1.2计算图的使用
代码:
代码说明:
以上代码产生了两个计算图,每个计算图定义了一个名为"v"的变量,在计算图1中被初始化为0,在计算图2中被初始化为1.因此可以看到在运行不同计算图时,张量v的值也是不一样的。Tensorflow中的计算图不仅可以隔离张量计算,还提供了管理张量和计算的机制,计算图可以通过tf.Graph.device函数来指定运算计算上的设别,这为Tensorflow使用GPU提供了机制。
二、Tensorflow数据类型——张量
张量时Tensorflow管理数据的形式。
2.1张量的概念
在Tensorflow程序中,所有的数据都是通过张量的形式表示。从功能的角度上看,张量可以被简单理解为多维数组。其中0阶张量表示标量(即一个数),一阶张量为向量,也就是一个一维数组;第n阶张量可以理解为一个n维数组。
但在Tensorflow中,张量的表现并不是直接采用数组的形式,它只是对Tensorflow中运算结果的引用。在张量中并没有真正保存数字,保存的是如何得到这些数字的计算过程。
例如:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
a = tf.constant([1.0,2.0], name="a")
b = tf.constant([2.0,3.0], name="b")
result = tf.add(a, b, name="add")
print(result)
输出:
Tensor("add_2:0", shape=(2,), dtype=float32)
分析:Tensorflow计算结果不是一个具体的数字,而是一个张量的结构。张量中保存了三个属性:名字(name)、维度(shape)、类型(type)。
- name:张量的唯一标识符,给出了这个张量是如何计算出来的。(联系上一节讲到的图)计算图中每一个节点代表了一个计算,计算的结果保存在张量中,所以张量和计算图上的所代表的计算结果是一一对应的,张量的命名通过:node:src_output的式给出。其中node是节点的名称,src_output表示当前张量来自节点的第几个输出。例如上例中的"add:0"则表示张量来自add节点的第一个输出。
- shape:数据的维度信息,(2,)表示的该张量result是一个一维数组,长度为2
- type:张量的数据类型(注:不同数据类型进行计算时会报错,例如float64和int32计算时会报错)
2.2 张量的使用
优点:
第一类:
- 通过张量来引用计算的中间结果可以使代码的可阅读性大大提升
- 通过张量来存储中间结果可以方便获取中间结果。
第二类:
- 当计算图构造完成之后,张量可以用来获取结果(即真实的数字)
2.3 会话(session)
会话用于哦并管理Tensorflow程序运行时的所有资源。所有计算万层之后便会需要关闭会话来帮助系统回收资源,否则会出现资源泄露的问题。
Tensorflow中使用的会话模式一般有两种,第一种使需要明确调用会话生成函数和关闭会话函数,其代码流程如下:
# 创建一个会话。
sess = tf.Session()
# 使用这个创建好的会话来得到关心的运算结果。比如:sess.run(result)--(存疑,因为我自己调用没有得到任何结果)
sess.close()
一般使用这种模式时,在所有计算完成之后,需要明确调用Session.close()函数来关闭会话释放资源。
另外一种——使用python的上下文管理器的机制,将所有的计算放在"with"的内部即可。当上下文管理器退出时会自动释放所有资源,这样既解决了因为异常退出时资源释放的问题,同时也解决了忘记调用Session.close()函数而产生的资源泄露。
待更新…
更多推荐




所有评论(0)