之前的章节说到使用计算图可以很方便地计算偏导数,可大大加快神经网络逆传播地速度,tensorflow作为常用地深度学习库,本质上来说也是一个构建计算图与执行计算图的过程,下面我们将来学习在tensorflow中如何构建计算图。
图的节点
节点的初始化
计算图分为节点与操作2部分,其中节点对应为变量(如常量、矢量、矩阵、张量等),而在tensorflow中,我们可以通过 constant 或 variable 来建立节点。(注意:节点中并不保存数据,而是保存运算结果的引用)
|
|
其中constant
用于生成常数张量,而Variable
生成变量张量,Variable()
时需要指定初始值(也可指定初始形状),初始化后变量的形状和类型是固定的,如要更改形状,则必须使用assign
操作且validate_shape=False
,在运行其他操作前,必须对变量初始化,最简单的操作是使用tf.global_variables_initializer()
进行全局初始化。
|
|
节点的数据类型
创建节点时,如果未显示指定节点数据类型,则tf会根据python原生数据类型进行推断,推断过程不一定靠谱,建议自行指定数据类型。tf中的数据类型与numpy中的数据类型是兼容的,可以直接将np数组传入tf的计算图进行计算。
|
|
tf中常用的数据类型如下:
tf.float16
: 16-bit half-precision floating-point.tf.float32
: 32-bit single-precision floating-point.tf.float64
: 64-bit double-precision floating-point.tf.bfloat16
: 16-bit truncated floating-point.tf.complex64
: 64-bit single-precision complex.tf.complex128
: 128-bit double-precision complex.tf.int16
: 16-bit signed integer.tf.int32
: 32-bit signed integer.tf.int64
: 64-bit signed integer.tf.bool
: Boolean.tf.string
: String.
图的操作
操作代表张量的计算,它以零或更多张量对象作为输入,并产生零或多个张量对象作为输出。该类型将由python节点构造器产生(比如tf.matmul
)或 tf.Graph.create_op
,并且需要使用tf.Session.run
来执行操作。
tf中常用的算术运算符如下:
tf.add
tf.subtract
tf.multiply
tf.add_n
tf.abs
tf.negative
tf.square
tf.sqrt
tf.pow
tf.exp
tf.log
tf.cos
tf.sin
tf.tan
另外tf也进行了运算符的重载,如tf.add(a,b)
与a+b
等价。
图与会话
图
图包含一组tf操作对象,它们代表计算单元、张量对象、表示操作之间流动的数据单元。
在tensorflow库在被加载的时候,它会自动创建一个Graph对象,并把它作为默认的数据流图。我们也可以通过tf.Graph()
创建新图,不同图是数据隔离的哦。
|
|
会话
会话对象(tf.Session
)封装执行操作对象的环境。Session.run()
后需要使用Session.close()
释放会话关联的所有资源
|
|