iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
AI/ ML & Data

不用買特斯拉也能自動駕駛?!30天學會訓練自己的自駕模型,再也沒人會說你不懂AI!系列 第 4

DAY 4 教學:EPOCH、模型架構與神經網路解析_(附上音樂🎵)

  • 分享至 

  • xImage
  •  

🎯 今日學習目標

  1. 深入理解 EPOCH 的概念及其在模型訓練中的作用。
  2. 探討專案中的程式架構,重點解析模型的運作流程。
  3. 學習如何使用 Netron 等工具視覺化模型,並了解不同格式的神經網路模型。
  4. 介紹神經網路架構及特徵提取的原理,並提供初學者友善的專有名詞解釋。

🧠 EPOCH 的概念

EPOCH 是在機器學習和深度學習中常見的一個術語。它指的是 將整個數據集用於模型訓練的一次完整循環。每個 EPOCH 完成後,模型已經“看過”了數據集中的所有數據一次。

🏎️ 舉例說明:

假設你有兩段各一分鐘的影片,每秒鐘包含 30 幀,總共 3600 幀影像。當這 3600 幀全部用於訓練模型一次時,就完成了一個 EPOCH。多個 EPOCH 可以幫助模型反覆學習數據的特徵,進而提高準確率。

🔄 EPOCH 與 BATCH 的關係:

數據集通常很大,不可能一次性全部送入模型進行訓練,因此我們將數據分批(batch)送入模型。一個 BATCH 是指一組數據,而 EPOCH 則代表所有數據完整跑一遍。這個過程可以幫助模型在有限的時間內學習更多特徵。


⚙️ 程式架構與運作流程

  1. serverB6.py

    • 負責呼叫 datagenB6.py 生成數據,並將數據放到特定的 port 上。
    • 其中,port 5557 提供訓練數據(training data),port 5558 提供驗證數據(validation data)。
  2. train_modelB6.py

    • 使用從 port 接收到的數據來訓練模型,最終生成訓練好的模型文件 modelB6.h5
    • 數據的傳輸類似於網路上的通訊,但其實是通過本地端口進行的,這種架構設計使得數據傳輸更加靈活。

🔧 數據格式與傳輸:

為了便於處理,影片檔會被轉換成 yuv 格式,然後進一步轉換成 h5 格式。這些格式的數據會通過 port 傳輸,供模型訓練和驗證使用。

🔍 Netron 工具:

Netron 是一款強大的模型視覺化工具,支持多種模型格式如 h5onnx 等。使用 Netron 可以幫助我們檢視模型的每一層,了解其架構和細節。


🛠️ 專案中的模型架構解析

modelB6.py 中,您使用了 TensorFlowKeras 來構建卷積神經網路(CNN)。這是一種常見的神經網路架構,特別適合處理影像數據。

🧱 主要組件解釋:

# 卷積層與激活層的建立
count = "1"

x = layers.Conv2D(128, 1, padding="same", name="block" + count + "_expand_conv")(x) 
x = layers.Activation("elu", name="block" + count + "_expand_activation")(x)

x = layers.DepthwiseConv2D(3, depth_multiplier=1, padding="same", name="block" + count + "_a_dwconv")(x)  
x = layers.Activation("elu", name="block" + count + "_a_activation")(x)  
x = layers.Conv2D(256, 1, padding="same", name="block" + count + "_project_conv")(x)  
  1. 卷積層(Conv2D)

    • 卷積層用於提取影像中的特徵。在這個例子中,第一行創建了一個 Conv2D 層,其核心大小為 1x1,這個層的主要目的是改變特徵圖的深度(也就是增加通道數)。
    • 第二行的 Activation 使用 ELU 激活函數,引入非線性來幫助模型學習更複雜的特徵。
  2. 深度可分離卷積層(DepthwiseConv2D)

    • DepthwiseConv2D 是一種特殊的卷積層,這裡的核心大小是 3x3,深度乘數為 1。這種卷積層將每個輸入通道單獨處理,有效地降低計算量。
    • 這一層對應的激活層也使用 ELU 激活函數
  3. 投影卷積層(Conv2D)

    • 投影卷積層主要目的是減少通道數,將特徵圖壓縮到更小的維度,從而降低後續層的計算負擔。
# 殘差連接的建立
x = layers.add([tmp, x], name="block" + count + "b_add")  # 殘差連接

🧠 殘差連接(Residual Connection):

殘差連接是一種將原始數據與處理過的數據相加的技術,這允許模型從兩個來源中學習更多的特徵。這是一種非常有效的技巧,可以解決 梯度消失問題,特別適合於深度神經網路。


📝 不同模型格式及視覺化工具

在專案中,我們會遇到不同的模型格式,每種格式都有其特點和應用場景:

  1. h5 格式:一種常用於儲存神經網路的格式,適合存儲層次數據。
  2. onnx 格式:是一個開放式的模型格式,旨在增強不同深度學習框架之間的互操作性。
  3. Netron 工具:可以用來視覺化不同格式的模型,如 modelB6.h5,幫助我們檢視模型架構和詳細信息。

🚀 Day 4 小結

今天我們學習了:

  1. EPOCH 的概念以及其如何在訓練過程中影響模型性能。
  2. 深入解析了 serverB6.pytrain_modelB6.py 的運作邏輯。
  3. 使用 Netron 等工具來視覺化並理解我們訓練的模型架構。
  4. 探討了卷積層、激活函數、殘差連接等神經網路中的核心概念。

在未來的教學中,我們將繼續深入探索模型的優化和實際應用。請繼續保持學習熱情,讓我們一起進入自動駕駛的世界吧!🚗💨


今日的音樂:Slow Dancing In A Burning Room (Live in L.A.)
Yes


上一篇
DAY 3 教學:在 VMware 上安裝 Poetry 和 OpenPilot_(附上音樂🎵)
下一篇
DAY 5 教學:ModelB6.py 的探討與神經網路結構_(附上音樂🎵)
系列文
不用買特斯拉也能自動駕駛?!30天學會訓練自己的自駕模型,再也沒人會說你不懂AI!5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言