TensorFlow学习记录:张量

上一篇文章讲了TensorFlow中什么是计算图,本文简单介绍下什么是张量。

在一个TensorFlow程序中,如果将计算图称为TensorFlow的计算模型,那么张量则可以称为TensorFlow的数据模型,因为张量是TensorFlow管理数据的形式,也就是说,在TensorFlow程序中,所有数据都可以借助张量的形式来表示。

张量,可以把它简单理解为不同维度的数组,其中零阶张量的表现形式是标量(Scaler),也就是一个数字;一阶张量的表现形式是向量(Vector),也就是一维数组;二阶张量的表现形式是二维数组;依次类推,n阶张量的表现形式就是n维数组。

我们先来看一个例子:

import tensorflow as tf
a=tf.constant([1.0,2.0],name='a')
b=tf.constant([3.0,4.0],name='b')
result=a+b
print(result)
#输出Tensor("add:0",shape=(2,),dtype=float32)

我刚第一次看到这个程序的时候,我的第一反应就是输出[4.0,6.0],可是事实不是这样,它的输出是一个Tensor的表示“Tensor(“add:0”,shape=(2,),dtype=float32)”。可以肯定的是result是一个张量,但实际运算中张量只是引用了程序中的运算结果,而不是一个真正的数组,张量保存的是运算结果的属性,而不是真正的数字。其中,这三个属性分别为名字(name),维度(shape)和数据类型(dtype)。

名字:它有时可以被看作是张量的一个名字,一般是要保存的节点的名字。计算图中的每一个节点都表示一个运算,而张量则将运算结果的属性保存了下来。这里操作的命名符合"node:src_output"的形式,其中node就是节点的名称(如上面的add),src_output表示这个张量是节点的第几个输出(编号从0开始)。

维度:它描绘了张量的维度信息,例如上面的那个例子shape=(2,)表示张量是一个1x2维的数组,或者可以理解为它保存了一个1x2维的运算结果。

数据类型:每一个张量的数据类型是唯一的。Tensorflow会检查参与某次运算的所有张量的数据类型,当发现类型不匹配时会报错,如下面例子所示

import tensorflow as tf
a=tf.constant([1,2],name='a')
b=tf.constant([3.0,4.0],name='b')
result=a+b
print(result)
#输出:TypeError: Input 'y' of 'Add' Op has type float32 that does not match type int32 of argument 'x'.

综上所述,我们可以这样理解,对于上面的例子,张量result储存的是一个名叫add节点的运算结果,它储存的是节点名为add的第1次输出(编号从0开始),运算结果是一个1x2维的数组,数据类型是float32。

如果想要输出真正的运算结果的话,我们要定义一个会话(Session),在会话中调用run函数将想要得到真正结果的张量传递进去,如下面例子所示:

import tensorflow as tf
a=tf.constant([1.0,2.0],name='a')
b=tf.constant([3.0,4.0],name='b')
result=a+b

with tf.Session() as sees:
	tf.global_variables_initializer().run()
	print(sees.run(result)) 
#输出[4. 6.]

参考书籍:《TensorFlow深度学习算法原理与编程实战》 蒋子阳 著

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章