Tensor 是张量,数据结构为多维数组 Flow 是流,表示张量之间计算转换的过程 TensorFlow组合起来就是数据流图
零阶张量就是标量,也就是一个数 一阶张量为向量,也就是一维数组 n 阶张量可以理解成 n 维数组
张量的属性:id,shape,dtype,value 得到 Tensor 的值,可以通过 numpy()方法,返回 Numpy.array 类型的数据
查看张量的 shape 属性还可以通过 get_shape()方法来获取 张量默认类型: 不带小数点的数会被默认为 int32 带小数点的会被默认为 float32 TensorFlow 会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错 可以通过 tf.cast()进行数据类型转换
常量创建
tf.constant( value, dtype=None, shape=None, name='Const' )
在创建常量时只有 value 值是必填的,dtype 等参数可以缺省,会根据具体的 value 值设置 相应的值 如果 shape 参数值被设定,则会做相应的 reshape 工作
变量创建 创建语句: 注意 V 是大写字母
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)执行阶段:建立一个会话,使用会话对象来实现计算图的执行。
在 TensorFlow 2 中,原有的 TensorFlow 1.X 的 API 整理到 tensorflow.compat.v1 包里去了 在 TensorFlow 2 使用 1.x 的图执行模式,或者使用其它 1.x 的 api:
- 导入 TensorFlow 时使用 import tensorflow.compat.v1 as tf 代替 import tensorflow as tf;
- 执行 tf.disable_eager_execution() 禁用 TensorFlow 2 默认的即时执行模式。
图执行模式只是建立计算图,并不会立马执行,执行需要在会话(session)中实现。
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()
运行结果:
运行sess.run(node1)的结果: 3.0
运行sess.run(node2)的结果: 4.0
运行sess.run(node3)的结果: 7.0
session 放到下一篇学习笔记中。