Tensor 基本觀念 (1)
前言 & 概述
Tensor 指的是多維度的陣列,是深度學習中最基本的運算元素。本文參考 TensorFlow 官方教學,將 Tensor 的相關介紹,以更簡單易懂的方式介紹給讀者!我們將 Tensor 基本觀念的介紹分為兩個部分:(1)、(2) 與 (3)。
在本篇文章 (1) 中,我們將學習 Tensor 與矩陣的差異、Tensor 的形狀以及如何取得 Tensor 中的元素。
Tensor 是什麼?
Tensor 可以想成是一種多維度的陣列,可以是 0 個、1 個、2 個 ⋯ 維度的陣列。如果是 0 個維度的 Tensor 又稱為 Scalar (就是一個數字);1 個維度的 Tensor 又稱為 Vector (向量);2 個維度的 Tensor 又稱為 Matrix (矩陣);3 個維度以上的 Tensor 就統稱為 Tensor。
下圖為簡單的整理:
Tensor 相關名詞介紹
在深度學習中,我們經常會使用一些專有名詞來描述 Tensor。例如,Tensor 的 Dimension (Axis)、Axes、Rank、Shape 與 Size。
- Dimension (Axis) : 指的是 Tensor 的其中一個維度。
- Axes : 指的是 Tensor 的每一個維度。
- Rank : 表示 Tensor 有多少個 Axes。不要和 Matrix 的 Rank 搞混了!!!
- Shape : 表示 Tensor 每一個 Axes 上有多少個元素。
- Size : 表示 Tensor 中總共有多少個元素。
動手實作 Tensor
單看名詞的定義,仍然相當抽象。因此,我們透過 TensorFlow 套件實際動手實作 Tensor 吧!
首先是 0 個維度的 Tensor,也就是 Scalar:
scalar = tf.constant(4) print(scalar) # output: tf.Tensor(4, shape=(), dtype=int32)
因為 Scalar 擁有 0 個 Axes,因此 Rank 為 0,Shape 中沒有任何數字。
接著是 1 個維度的 Tensor,也就是 Vector:
vector = tf.constant([2.0, 3.0, 4.0]) print(vector) # output: tf.Tensor([2. 3. 4.], shape=(3,), dtype=float32)
因為 Vector 擁有 1 個 Axes,因此 Rank 為 1,Shape 中有 1 個數字 3 表示該 Axis 的元素數量。
最後是 2 個維度的 Tensor,也就是 Matrix:
matrix = tf.constant([[1, 2], [3, 4], [5, 6]]) print(matrix) # output: tf.Tensor( [[1 2] [3 4] [5 6]], shape=(3, 2), dtype=int32)
因為 Matrix 擁有 2 個 Axes,因此 Rank 為 2,Shape 中有 2 個數字,3 表示該 Row Axis 有 3 個元素、2 表示 Column Axis 有 2 個元素。
下圖為剛剛建立的三個 Tensor 的示意圖:
接著是 3 個維度的 Tensor:
如上圖所示,3 個維度的 Tensor 擁有 3 個 Axes,Rank 為 3。因此,Shape 中當然也有 3 個數字,分別表示每一個 Axis 中元素的個數。
下圖為這一個 3 維 Tensor 不同的詮釋方式:
我們可以將 Shape = [3, 2, 5] 理解為「這一個 Tensor 有 3 Layer,每個 Layer 有 2 個 Row,每個 Row 有 5 個 Column」。
最後,我們再來看看 4 個維度的 Tensor:
一個 Rank = 4 的 Tensor 有 4 個 Axes。我們通常由左而右真針對每一個 Axis 進行編號。Axis 的編號相當重要,因為我們有時候只會針對其中一個 Axis 進行運算。
我們可以透過 Tensor 物件的 Method 了解 Tensor 的資訊:
Tensor 之間的基本運算
Tensor 之間可以進行運算,例如:Element-Wise 相加、Element-Wise 相乘或是矩陣相乘。如下圖所示,我們可以透過 TensorFlow 內建的函式進行 Tensor 之間的運算。
除了透過 TensorFlow 內建函式,也能直接使用符號進行 Tensor 之間的運算:
結語
在本文中,我們了解了 Tensor 的概念以及基本的專有名詞。並透過 TensorFlow 套件學習實作 Tensor。在下一篇文章中,將學習如何取得 Tensor 中的特定元素以及改變 Tensor 的 Shape。
👣 👣 👣 我喜歡撰寫程式開發、資料科學領域相關的文章,希望可以透過簡單的文字解釋複雜的觀念!如果你也有興趣可以到我的其他平台逛逛哦!
👉🏻 DataSci Ocean
👉🏻 YouTube
👉🏻 Instagram
延伸閱讀
👉🏻 Google Colaboratory 介紹
👉🏻 條件機率 vs 聯合機率
👉🏻 將 Django App 部署到 Heroku on Mac
👉🏻 在 LINE Developers 上建立 LINE Bot