在【Day 03】的章節中,我們簡單提到了 Keras API 內的兩個模型,而 Keras 做為 TensorFlow 主要的高級 API 之一,雖然看起來會很難很複雜,但其實是初入機器學習領域的新手,也可以透過了解其中的關係做到建立與訓練模型。我們本次基於主要有三個 API 用於機器學習模型:Sequential API、Functional API、以及 Model Subclassing API。當然還有其他像是 Data、Metric、Optimizer、Callbacks API 等,但這些 API 都可以透過特定的方式延伸,也會在之後的章節中提到。
在進入後面的章節之前,我們可以先深入了解 Layers(層)、Models(模型)、以及 API 的名詞定義與其說明,這些是很重要的概念。我們首先可以先了解其中的內容與其關係,我們將會更容易以此做延伸。
根據官方文件定義,Layers 是神經網路中最基礎能指定資料在輸入與輸出的流動當中,可進行的轉換架構。
Layers 是神經網路的架構中,最基本組成的單元,其之間可以依照其輸入/輸出特性層層疊加,以完成不同的任務,例如分類、回歸、降噪等。每一層的輸入資料將會經過其背後的數學計算,產生下一層的輸出數據。常見的 Layers 包含以下種類:
• 會將前一層的所有輸出數據,連接到下一層的所有輸入。一般用於分類與 Regression(回歸)的任務
• 會利用不同種類的過濾器,依據不同的從影像檔中提取其特性。廣泛用於做影像分類與物件檢測的任務
• 會將前一層輸出值以非先線性函數做數學轉換,將非線性特徵附加於具線性特徵的圖片。一般常用於神經網路中學習較複雜的圖形。
• 會將輸入的值(向量、張量)劃分為眾多小區塊,並將每區塊取其最大值或平均值,以降低其維度。一般用於減少模型中的參數數量,同時使模型對雜訊的容錯率提高。
• 將高維度的張量輸入值轉換為一維線性輸入向量,主要做為將 Convolutional Layer 的輸出傳遞給 Dense Layer 之間的橋樑。
• 會在訓練的過程中隨機捨棄一些神經元,以避免發生 Overfitting,並可以改看模型的性能。
• 會在訓練的過程中,將輸入的 Layer 向量做正常化運算。常用於使訓練過程更加穩定,並改善模型的性能。
• 屬於 RNN 的一種,會學習像是語音與文字之類的序列資料。一般用於自然語言處理與機器翻譯任務。
• 會將高維度的輸入張量轉換為單一純量值,常用於影像分類,因為只需要將整個影像檔做一次分類。一般用於 CNN 中的 Dense Layer 替代方案。
• 會將文字轉換為數字向量,常用於供神經網路學習的自然語言處理方法。
• 會將傳統的卷積(Convolutional)操作,分割成深度(Depthwise)與逐點(Pointwise)卷積,使運轉性能更有效率。
• 會將輸入的張量值增加。常用於從較小的圖資中產生較大的影像輸出。
• 把輸入值(矩陣、向量或張量)空缺的部分以 0 填充,常用於需要將影像做填充到特定大小的任務,一般用於 Convolutional Layer。
根據官方文件定義,Model 是 Keras 之中最基本的組織原則,包含整個神經網路中,每一層的排列、以及進行訓練與評估的組態。
可見 Model 會用來表現出一個神經網路的結構,他們都由 Layers 一層層依照其特性組成的模型,其輸入就是第一層 Layer,輸出就是就是最後一層的 Layer,這些 Model 就可以為我們所要執行的任務建立神經網路的架構。
(1) Sequential Model:是最簡單的模型,由告種線性的 Layer 堆疊而成
(2) Functional Model:可以建立多個輸入、輸出、分支、及其他特性,較為彈性。
(3) Model Subclass:能最大程度地控制架構,並且完成前兩者做不到的功能。
(1) Backend:做數學運算
Backend 是 Keras 的一個初階組態,決定了 Model 在後端引擎上的運算方式。Keras 預設的 Backend 是 TensorFlow,但也可以使用 PyTorch 或 Theano。
(2) Utils(Utilities):做資料處理
Utils 模組提供了 Keras 常用的函數,例如資料預處理、模型評估、以及視覺化等。
(3) Datasets:訓練與評估
Datasets 是用於訓練與評估的資料集,可以從不同來源載入,例如檔案、資料庫、以及 API 等。
這是眾多 Module 當中的其中幾個。總結來說,模型 Model 是 Keras API 的組件,用來定義模型的 Layers(層次)結構和輸入&輸出,以執行特定任務;模組 Module 是 Keras Model 的附加功能的組件,包含 Class 以及函數,是一個用於「提供額外功能」的集合
API 是一組定義軟體元件之間互動的規則與規範。而在 Keras 中,本身針對不同程度的客製化與靈活度的需求,提供多種 API 使開發人員能建立並訓練機器學習模型。
在 Keras 當中的核心 API 可以分為主要兩個部分:
這是 Keras API 的核心部分,提供了基本建立 Layer、Optimizer、以及 Loss Function 的區塊。我們會在下一篇文章較詳細講述關於這部分的 Sequential API、Functional API、以及 Model Subclassing API,這對於後續進行神經網路的訓練尤為重要。
屬於 Keras 額外提供的附加函數,針對 Keras Model 提供額外的運算功能。有助於深度了解 Keras 的運作原理、或需要自己建立 Layer 等。
原本預期這部分會很快打完,結果前期整理資料就花不少時間,但這樣或許會對理解整個架構上,更清楚知道每一個環節之間的關係,我想這時間也是很值得的。
我們首先了解到 Layers 有哪些種類,我們就能更能清楚了解要運用何種 Layers 將特定檔案做預處理;後來了解到 Models 的類型,主要能用三種形式呈現,分別為 Sequential、Functional、以及 Model Subclass;並且可以透過 Module 提供一些附加功能。這些都會在後續以程式碼向各位呈現。
最後的 API 部分,會在下一篇文章附帶程式碼,做一個較為清楚的說明。
五、 參考資料
[1] Layer
https://techvidvan.com/tutorials/keras-layers/
https://www.educative.io/answers/what-are-keras-layers
https://keras.io/api/layers/
https://medium.com/analytics-vidhya/a-guide-to-neural-network-layers-with-applications-in-keras-40ccb7ebb57a
[2] Model & Module
https://www.activestate.com/resources/quick-reads/what-is-a-keras-model/
https://data-flair.training/blogs/keras-modules/