之前的章节说到使用计算图可以很方便地计算偏导数,可大大加快神经网络逆传播地速度,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.addtf.subtracttf.multiplytf.add_ntf.abstf.negativetf.squaretf.sqrttf.powtf.exptf.logtf.costf.sintf.tan
另外tf也进行了运算符的重载,如tf.add(a,b)与a+b等价。
图与会话
图
图包含一组tf操作对象,它们代表计算单元、张量对象、表示操作之间流动的数据单元。
在tensorflow库在被加载的时候,它会自动创建一个Graph对象,并把它作为默认的数据流图。我们也可以通过tf.Graph()创建新图,不同图是数据隔离的哦。
|
|
会话
会话对象(tf.Session)封装执行操作对象的环境。Session.run()后需要使用Session.close()释放会话关联的所有资源
|
|