緯緯道來

大四學生,主修資訊工程,熱衷於深度學習與機器學習。初期先以基本的程式教學為主,希望我的文章能夠幫助到你!

Tensor 基本觀念 (1)

發布於
想學習 TensorFlow 嗎?不如從 Tensor 開始吧!

前言 & 概述

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 的示意圖:

source: TensorFlow

接著是 3 個維度的 Tensor:

source: TensorFlow

如上圖所示,3 個維度的 Tensor 擁有 3 個 Axes,Rank 為 3。因此,Shape 中當然也有 3 個數字,分別表示每一個 Axis 中元素的個數。

下圖為這一個 3 維 Tensor 不同的詮釋方式:

source: TensorFlow

我們可以將 Shape = [3, 2, 5] 理解為「這一個 Tensor 有 3 Layer,每個 Layer 有 2 個 Row,每個 Row 有 5 個 Column」。

最後,我們再來看看 4 個維度的 Tensor:

source: TensorFlow

一個 Rank = 4 的 Tensor 有 4 個 Axes。我們通常由左而右真針對每一個 Axis 進行編號。Axis 的編號相當重要,因為我們有時候只會針對其中一個 Axis 進行運算。

我們可以透過 Tensor 物件的 Method 了解 Tensor 的資訊:

source: TensorFlow

Tensor 之間的基本運算

Tensor 之間可以進行運算,例如:Element-Wise 相加、Element-Wise 相乘或是矩陣相乘。如下圖所示,我們可以透過 TensorFlow 內建的函式進行 Tensor 之間的運算。

source: TensorFlow

除了透過 TensorFlow 內建函式,也能直接使用符號進行 Tensor 之間的運算:

source: TensorFlow

結語

在本文中,我們了解了 Tensor 的概念以及基本的專有名詞。並透過 TensorFlow 套件學習實作 Tensor。在下一篇文章中,將學習如何取得 Tensor 中的特定元素以及改變 Tensor 的 Shape。


👣 👣 👣 我喜歡撰寫程式開發、資料科學領域相關的文章,希望可以透過簡單的文字解釋複雜的觀念!如果你也有興趣可以到我的其他平台逛逛哦!
👉🏻 DataSci Ocean
👉🏻 YouTube
👉🏻 Instagram


延伸閱讀

👉🏻 Google Colaboratory 介紹
👉🏻 條件機率 vs 聯合機率
👉🏻 將 Django App 部署到 Heroku on Mac
👉🏻 在 LINE Developers 上建立 LINE Bot

喜歡我的文章嗎?
別忘了給點支持與讚賞,讓我知道創作的路上有你陪伴。

CC BY-NC-ND 2.0 版權聲明
5

看不過癮?

一鍵登入,即可加入全球最優質中文創作社區