###### tags: `課程共筆` # Tensors ## Q1 Tensor是什麼?跟Vector/Matrix差在哪裡? Vector(向量): 一維陣列(array),可以表達一串訊號、一列價格、人的身高、N維向量等等。 `e.g. [2,2,3], shape=(3,)` > 註: 通常N維陣列跟N維座標指的維度不一樣。N維陣列的每一維都可以說是$K_n$維座標。為了好區分,正式來講,N維陣列應該叫做N秩(rank)陣列或N軸(axis)陣列。 Matrix(矩陣): 二維陣列, 會有行跟列(長度為長跟寬)。 `e.g. [[1,2,3,4],[2,2,3,4]], shape=(2,4)` Tensor(張量): 不限維度的陣列,可以到三維以上 `e.g. [[[1,2,3,4],[2,2,3,4]],[[1,2,3,4],[2,2,3,4]]], shape=(2,2,4)` > P.S. 在物理上張量代表某個受力面受某另個方向受力, e.g. $\sigma_{21}$代表紅色受力面(面1)被往方向2拽的強度,若只有這個張量,正方體會在水平方向逆時鐘旋轉。 就是向量已經不足以表達施力狀態才會有Tensor這個新詞彙。 ![](https://i.imgur.com/PFpyUAg.png =300x) ## Q2 Dimension跟rank是什麼 在資料科學的領域,常常"維度"這個詞會造成很多困擾、混淆。 **座標:** 一個向量 [2,2,3],我們說他可以代表一個"3維"卡氏座標。 ![](https://i.imgur.com/ye4x5BA.png) **陣列:** 而一個shape是[2,2,3]的陣列,被說是"3維"陣列,也是"3維"張量。 ![](https://i.imgur.com/KFJQSA2.png) **Dimension(維度):** 獨立參數的數量,獨立參數比如說空間的xy位置、時間軸、總風量、溫度等等。 **Tnsor Rank(張量的秩)/Axis(軸):** 對於tensor而言是在說張量維度,也是看待tensor的獨立方向數。 例如前面陣列的每個axis中會有數個項目, > e.g. 第一個軸有兩個項目: tensor[0,...]=[[0,5],[0,5],[0,5]], tensor[1,...]=[[3,0],[3,0],[3,0]] ## Q3 Tensor operation為什麼要指定操作的軸? Tensor有很多可做的操作項目需要指定操作的軸,例如加總(sum)、乘積(production)、矩陣相乘(Matrix multiplication)、捲積(convolution)等等。有可能有各種情況: 1. 在指定操作維度(軸)下,會列舉(enumerate)該軸所有項目計算,計算後會使該軸消失。 > e.g.將一個內容全是1的Tensor在第一軸做加總,第一軸消失: ``` x=tf.ones((4,2,3)) tf.math.reduce_sum(x,axis=0) ``` ``` 因tensor shape為(4,2,3),則加總後變成數值全為4且shape為(2,3)的tensor: [[4., 4., 4.], [4., 4., 4.]] ``` 2. 多tensor的operation在指定軸下,會列舉該軸在多個tensor所有對應項目來計算,並得到一個該軸仍保持長度的結果。 > e.g.將兩個Tensor指定第一軸做矩陣乘法,操作後除第一軸外,期他軸數量改變: ``` x=tf.ones((4,2,3)) y=tf.ones((4,3,2)) x@y ``` ``` 因tensor shape為(4,2,3)及(4,3,2),矩陣相乘後變成 數值全為4且shape為(2,3)的tensor: [[[3., 3.], [3., 3.]], [[3., 3.], [3., 3.]], [[3., 3.], [3., 3.]], [[3., 3.], [3., 3.]]] ```