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深度學習算法原理與編程實戰》 蔣子陽 著

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