https://blog.csdn.net/kansas_lh/article/details/79321234
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為數據類型。