EPOCH 是在機器學習和深度學習中常見的一個術語。它指的是 將整個數據集用於模型訓練的一次完整循環。每個 EPOCH 完成後,模型已經“看過”了數據集中的所有數據一次。
假設你有兩段各一分鐘的影片,每秒鐘包含 30 幀,總共 3600 幀影像。當這 3600 幀全部用於訓練模型一次時,就完成了一個 EPOCH。多個 EPOCH 可以幫助模型反覆學習數據的特徵,進而提高準確率。
數據集通常很大,不可能一次性全部送入模型進行訓練,因此我們將數據分批(batch)送入模型。一個 BATCH 是指一組數據,而 EPOCH 則代表所有數據完整跑一遍。這個過程可以幫助模型在有限的時間內學習更多特徵。
serverB6.py:
datagenB6.py
生成數據,並將數據放到特定的 port 上。train_modelB6.py:
modelB6.h5
。為了便於處理,影片檔會被轉換成 yuv 格式,然後進一步轉換成 h5 格式。這些格式的數據會通過 port 傳輸,供模型訓練和驗證使用。
Netron 是一款強大的模型視覺化工具,支持多種模型格式如 h5、onnx 等。使用 Netron 可以幫助我們檢視模型的每一層,了解其架構和細節。
在 modelB6.py
中,您使用了 TensorFlow 和 Keras 來構建卷積神經網路(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)
卷積層(Conv2D):
Activation
使用 ELU 激活函數,引入非線性來幫助模型學習更複雜的特徵。深度可分離卷積層(DepthwiseConv2D):
DepthwiseConv2D
是一種特殊的卷積層,這裡的核心大小是 3x3,深度乘數為 1。這種卷積層將每個輸入通道單獨處理,有效地降低計算量。投影卷積層(Conv2D):
# 殘差連接的建立
x = layers.add([tmp, x], name="block" + count + "b_add") # 殘差連接
殘差連接是一種將原始數據與處理過的數據相加的技術,這允許模型從兩個來源中學習更多的特徵。這是一種非常有效的技巧,可以解決 梯度消失問題,特別適合於深度神經網路。
在專案中,我們會遇到不同的模型格式,每種格式都有其特點和應用場景:
modelB6.h5
,幫助我們檢視模型架構和詳細信息。今天我們學習了:
serverB6.py
和 train_modelB6.py
的運作邏輯。在未來的教學中,我們將繼續深入探索模型的優化和實際應用。請繼續保持學習熱情,讓我們一起進入自動駕駛的世界吧!🚗💨
今日的音樂:Slow Dancing In A Burning Room (Live in L.A.)