Tensor是张量,数据结构为多维数组
Flow是流,表示张量之间计算转换的过程
TensorFlow组合起来就是数据流图
TensorFlow

零阶张量就是标量,也就是一个数
一阶张量为向量,也就是一维数组
n阶张量可以理解成n维数组

张量的属性:id,shape,dtype,value
得到Tensor的值,可以通过 numpy()方法,返回Numpy.array类型的数据

查看张量的shape属性还可以通过get_shape()方法来获取
张量默认类型: 不带小数点的数会被默认为int32 带小数点的会被默认为float32
TensorFlow会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错
可以通过tf.cast()进行数据类型转换

常量创建

1
tf.constant( value, dtype=None, shape=None, name='Const' )

在创建常量时只有value值是必填的,dtype 等参数可以缺省,会根据具体的value值设置 相应的值
如果shape参数值被设定,则会做相应的reshape工作

变量创建
创建语句: 注意V是大写字母

1
tf.Variable ( initial_value, dtype=None, shape=None, trainable =True name='Variable' )

变量像常量一样在创建时必须确定初始值,其它可以缺省
也可以用一个张量作为初始值

TensorFlow中的变量是一种特殊的设计,是可以被机器优化过程中自动改 变值的张量,也可以理解为待优化的张量。
在TensorFlow中变量创建后,一般无需人工进行赋值,系统会根据算法模 型,在训练优化过程中自动调整变量的值。
在变量的参数中,trainable参数用来表征当前变量是否需要被自动优化, 创建变量对象时默认是启用自动优化标志。

assign()可以进行人工赋值
assign_add()、assign_sub()方法来实现变量的加法和减法值更新

计算图(数据流图)是一个有向图,由以下内容构成:
一组节点,每个节点都代表一个操作,是一种运算
一组有向边,每条边代表节点之间的关系(数据传递和 控制依赖)

TensorFlow有两种边:
常规边(实线):代表数据依赖关系。一个节点的运算输出成 为另一个节点的输入,两个节点之间有tensor流动(值传递)
特殊边(虚线):不携带值,表示两个节点之间的控制相关性。
比如,happens-before关系,源节点必须在目的节点执行前完 成执行

TensorFlow 1.x版本代码的执行模式是传统的静态图执行模式(Graph Execution),效率较高但存在着一定弊端,如入门门槛高、调试困难、灵活性差、无法使用Python原生控制语句等。
TensorFlow 2默认采用动态图执行机制(Eager Execution)。
基于静态计算图的图执行模式把程序分为两部分:
1)构建阶段:建立一个 “计算图”,通过图的模式来定义数据与操作 的执行步骤;
2)执行阶段:建立一个会话,使用会话对象来实现计算图的执行。

Roger_2020-04-02_21-38-11.png

在TensorFlow 2中,原有的TensorFlow 1.X 的 API整理到tensorflow.compat.v1包里去了
在TensorFlow 2使用1.x的图执行模式,或者使用其它1.x的api:

  1. 导入TensorFlow时使用 import tensorflow.compat.v1 as tf 代替import tensorflow as tf;
  2. 执行tf.disable_eager_execution() 禁用TensorFlow 2默认的即时执行模式。

图执行模式只是建立计算图,并不会立马执行,执行需要在会话(session)中实现。

1
2
3
4
5
6
7
sess=tf.Session()

print("运行sess.run(node1)的结果:",sess.run(node1))
print("运行sess.run(node2)的结果:",sess.run(node2))
print("运行sess.run(node3)的结果:",sess.run(node3))

sess.close()

运行结果:

1
2
3
运行sess.run(node1)的结果: 3.0
运行sess.run(node2)的结果: 4.0
运行sess.run(node3)的结果: 7.0

session放到下一篇学习笔记中。


本文总访问