iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
AI & Data

CNN/DNN Training by using Google TensorFlow系列 第 6

【Day 06】概略了解 Keras API 的摘要 - Part 1. Layers / Model / Module

  • 分享至 

  • xImage
  •  

零、前言

在【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 是神經網路的架構中,最基本組成的單元,其之間可以依照其輸入/輸出特性層層疊加,以完成不同的任務,例如分類、回歸、降噪等。每一層的輸入資料將會經過其背後的數學計算,產生下一層的輸出數據。常見的 Layers 包含以下種類:

1. Dense Layer (Fully Connected Layer):

• 會將前一層的所有輸出數據,連接到下一層的所有輸入。一般用於分類與 Regression(回歸)的任務

2. Convolutional Layer (Conv2D):

• 會利用不同種類的過濾器,依據不同的從影像檔中提取其特性。廣泛用於做影像分類與物件檢測的任務

3. Activation Layer (e.g., ReLU, Sigmoid, Softmax):

• 會將前一層輸出值以非先線性函數做數學轉換,將非線性特徵附加於具線性特徵的圖片。一般常用於神經網路中學習較複雜的圖形。

4. Pooling Layer (MaxPooling2D or AveragePooling2D):

• 會將輸入的值(向量、張量)劃分為眾多小區塊,並將每區塊取其最大值或平均值,以降低其維度。一般用於減少模型中的參數數量,同時使模型對雜訊的容錯率提高。

5. Flatten Layer:

• 將高維度的張量輸入值轉換為一維線性輸入向量,主要做為將 Convolutional Layer 的輸出傳遞給 Dense Layer 之間的橋樑。

6. Dropout Layer:

• 會在訓練的過程中隨機捨棄一些神經元,以避免發生 Overfitting,並可以改看模型的性能。

7. Batch Normalization Layer:

• 會在訓練的過程中,將輸入的 Layer 向量做正常化運算。常用於使訓練過程更加穩定,並改善模型的性能。

8. LSTM and GRU Layers (for Recurrent Neural Networks - RNNs):

• 屬於 RNN 的一種,會學習像是語音與文字之類的序列資料。一般用於自然語言處理與機器翻譯任務。

9. Global Pooling Layers (e.g., GlobalMaxPooling2D, GlobalAveragePooling2D):

• 會將高維度的輸入張量轉換為單一純量值,常用於影像分類,因為只需要將整個影像檔做一次分類。一般用於 CNN 中的 Dense Layer 替代方案。

10. Embedding Layer (for Word Embeddings):

• 會將文字轉換為數字向量,常用於供神經網路學習的自然語言處理方法。

11. SeparableConv2D Layer:

• 會將傳統的卷積(Convolutional)操作,分割成深度(Depthwise)與逐點(Pointwise)卷積,使運轉性能更有效率。

12. UpSampling2D Layer:

• 會將輸入的張量值增加。常用於從較小的圖資中產生較大的影像輸出。

13. ZeroPadding2D Layer:

• 把輸入值(矩陣、向量或張量)空缺的部分以 0 填充,常用於需要將影像做填充到特定大小的任務,一般用於 Convolutional Layer。

二、Model(模組)

根據官方文件定義,Model 是 Keras 之中最基本的組織原則,包含整個神經網路中,每一層的排列、以及進行訓練與評估的組態。

可見 Model 會用來表現出一個神經網路的結構,他們都由 Layers 一層層依照其特性組成的模型,其輸入就是第一層 Layer,輸出就是就是最後一層的 Layer,這些 Model 就可以為我們所要執行的任務建立神經網路的架構。

1. Model 的組成可以有很多種,以下是在 Keras 當中常見的三種模型

  (1) Sequential Model:是最簡單的模型,由告種線性的 Layer 堆疊而成
  (2) Functional Model:可以建立多個輸入、輸出、分支、及其他特性,較為彈性。
  (3) Model Subclass:能最大程度地控制架構,並且完成前兩者做不到的功能。

2. 而以上三種 Model 的組成方式的選擇,都可以搭配模組運作(Modules),例如:

  (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(Application Programming Interface)

API 是一組定義軟體元件之間互動的規則與規範。而在 Keras 中,本身針對不同程度的客製化與靈活度的需求,提供多種 API 使開發人員能建立並訓練機器學習模型。

在 Keras 當中的核心 API 可以分為主要兩個部分:

1. Model API

這是 Keras API 的核心部分,提供了基本建立 Layer、Optimizer、以及 Loss Function 的區塊。我們會在下一篇文章較詳細講述關於這部分的 Sequential API、Functional API、以及 Model Subclassing API,這對於後續進行神經網路的訓練尤為重要。

2. Module API

屬於 Keras 額外提供的附加函數,針對 Keras Model 提供額外的運算功能。有助於深度了解 Keras 的運作原理、或需要自己建立 Layer 等。

四、後記

原本預期這部分會很快打完,結果前期整理資料就花不少時間,但這樣或許會對理解整個架構上,更清楚知道每一個環節之間的關係,我想這時間也是很值得的。

我們首先了解到 Layers 有哪些種類,我們就能更能清楚了解要運用何種 Layers 將特定檔案做預處理;後來了解到 Models 的類型,主要能用三種形式呈現,分別為 Sequential、Functional、以及 Model Subclass;並且可以透過 Module 提供一些附加功能。這些都會在後續以程式碼向各位呈現。

https://ithelp.ithome.com.tw/upload/images/20230926/20163203gZoiswjUcY.jpg

最後的 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/


上一篇
【Day 05】簡介與示範 Convolutional 與 Recurrent 神經網路
下一篇
【Day 07】概略了解 Keras API 的摘要 - Part 2. Sequential & Functional Model 與 API 細節解說
系列文
CNN/DNN Training by using Google TensorFlow12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言