什麼是Tensor

tensor是tensorflow基礎的一個概念——張量。
Tensorflow用到了數據流圖,數據流圖包括數據(Data)、流(Flow)、圖(Graph)。Tensorflow裏的數據用到的都是tensor,所以谷歌起名爲tensorflow。
下面介紹張量幾個比較重要的概念

張量的維度(秩):Rank/Order
這裏寫圖片描述
Rank爲0、1、2時分別稱爲標量、向量和矩陣,Rank爲3時是3階張量,Rank大於3時是N階張量。這些標量、向量、矩陣和張量裏每一個元素被稱爲tensor element(張量的元素),且同一個張量裏元素的類型是保持一樣的。

Tensor的屬性

1.數據類型dtype d是data的首字母,type是類型的意思。tensor裏每一個元素的數據類型是一樣的。類似於Numpy中ndarray.dtype,tensorflow裏的數據類型可以有很多種,比方說tf.float32就是32位的浮點數,tf.int8就是8位的整型,tf.unit8就是8位的無符號整型,tf.string爲字符串等等。
2.形狀Shape 類似於Numpy中ndarray.shape,比方說一個2行3列的二維矩陣,他的形狀就是2行3列。
3.其他屬性 device是tensor在哪個設備上被計算出來的,graph是tensor所屬的圖,name是tensor的名字
,op是operation的縮寫是產生這個tensor的操作運算,對應圖上的結點,這些結點接收一些tensor作爲輸入並輸出一些tensor。還有等等屬性,可以查閱官網。
tensor和Numpy有很多共同的性質,tensorflow的作者應該參考了numpy(個人臆測)

幾種Tensor
1.Constant(常量)是值不能改變的一種tensor,定義在tf.constant這個類裏。

這裏寫圖片描述
constant中有幾個屬性,value就是constant的數值,我們可以給他賦值,比方說0維的scalar,1維的Vector,2維的matrix或者是3維的張量。dtype、shape、name剛都有寫過,verify_shape是布爾值,用於驗證值的形狀。除了value外都不一定要指定,可以有默認的值但是必須要有一個value。
2.Variable(變量)是值可以改變的一種tensor,定義在tf.Variable這個類中。構造函數如下圖,我也看不懂其實。
這裏寫圖片描述
3.Placeholder(佔位符)先佔住一個固定的位置,之後在往裏面添加值的一種Tensor。定義在tf.placeholder中。這裏只有三個屬性如下圖。並沒有value,因爲賦值後就不是佔位符了。只有dtype,shape,name三個屬性。賦值的機制用到了python中字典,即feed_dict。
這裏寫圖片描述

x = tf.palceholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with if.Session() as sess:
    print(sess.run(y))
    rand_array = np.random.rand(1024, 1024)
    print(sess.run(y, feed_dict = {x: rand_array}))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

比剛說官網的例子定義了x佔位符,數值類型是tf.float32,形狀是1024*1024的二維矩陣。在用會話正式運行圖的時候用feed_dict,首先給一個鍵後加真實的值。

4.SparseTensor(稀疏張量)是一種稀疏的Tensor,類似線代中稀疏矩陣。定義時只需要定義非0的數,其他的數會自動填充。
這裏寫圖片描述

Tensor表示法
這裏寫圖片描述
tf.Tensor就是名字,’Const’是名字。0是索引,表示張量是這個計算中產生的第幾個。shape=()是形狀,這個是標量所以是空,dtype爲數據類型。

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