交通與工商數據分析實驗室-第二次程式訓練作業
從零開始手動建構一個具備單一隱藏層的淺層類神經網路。其核心的函式庫完整實現了資料生成、正規化、向前與反向傳播等演算法,並採用 Tangent Sigmoid 作為激活函數。
第一階段是解決迴歸任務,訓練網路學習兩個四位數的加法,並分析不同隱藏層神經元數量對平均誤差的影響。
第二階段則是挑戰經典的 XOR 二元分類問題,使用 2-2-1 的網路架構進行訓練。
最後將每個訓練週期的預測結果與誤差變化製作成動態 GIF 動畫,有效呈現了模型的學習過程。
訓練目標-了解類神經的運作方式、基於倒傳遞的參數調整概念,以及解讀類神經參數的意義
- 隱藏層的神經元使用Tangent Sigmoid作為激活函數
- 輸出層為線性函數
- 類神經網路的輸入為兩個四位數的數值,輸出則為這兩個數的總和
- 調整你的隱藏層神經元數量,並畫出一張神經元數量對30次訓練結果之誤差平均的圖。
PS1: 撰寫類神經前請先產生你的資料集,建議要有10000筆以上,接著把這個資料集切開成訓練與測試資料集。
PS2: 不管是輸入還是輸出都要正規化到0-1之間,而產出結果時,需要把輸出反正規化到原本的空間中。
- 完成這個資料集的分類動作。在這個資料集中,你會產生10000筆虛擬資料
- x的範圍可以落在[-0.5, 0.2]或[0.8, 1.5]兩個區塊中
- y的範圍可以落在[-0.5, 0.2]或[0.8, 1.5]兩個區塊中
- 若x與y資料落在[-0.5, 0.2]中,代表其會被轉為0,反之若落在[0.8, 1.5]中,代表其會被轉為1
- 每個虛擬資料最後屬於哪個類別則由XOR邏輯決定。
PS1: 類神經的輸入是x與y的數值,輸出則是一個數值,若此數值小於等於0.5,則被分到第1類,反之若大於0.5,則被分到第2類。
這個類神經的輸入與輸出都要先完成正規化後才能開始類神經的訓練
PS2: 請把每次訓練的參數結果視覺化呈現出來(能做成動態更佳,如下面的影片所示),並嘗試解讀這樣的視覺化結果
動態視覺範例.mp4
- 參數:
隱藏層神經元個數 = 1~20、學習率 = 0.1%
Epoch = 100、訓練次數 = 30
生成數據量 = 30000、訓練集/測試集比例 = 70%/30%
輸入 = 兩四位數字整數、輸出 = 輸入相加
正規化 => (輸入-最小值)/(最大值-最小值)
Activation Function => f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))
- 執行流程
graph TB
A[生成數據] --> B[正規化數據]
B --> C[切分訓練測試集]
C --> D[依隱藏層神經元數初始化2-n-1的NN]
D --> E[依照Epoch重複訓練]
E --> F[預測並將結果反正規化]
F --> G[記錄誤差]
G --> H{判斷隱藏層神經元是否已屆上限}
H --> |是| I{判斷訓練是否已達設定次數}
I --> |是| J[計算平均誤差並繪製圖表]
H --> |否| L[隱藏層神經元+1]
L --> D
I --> |否| M[開啟新的一輪訓練]
M --> A
- 訓練結果
- 參數:
隱藏層神經元個數 = n、學習率 = 0.1%
Epoch = 100、訓練次數 = 1
生成數據量 = 10000、訓練集/測試集比例 = 70%/30%
輸入 = 兩介於[-0.5. 0.2] 或 [0.8, 1.5]的浮點數、輸出 = 1或0
正規化 => (輸入-最小值)/(最大值-最小值)
Activation Function => f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))
分類: Y = 0; if Y <= 0.5 | Y=1; else
- 執行流程
graph TB
A[生成數據] --> B[正規化數據]
B --> C[切分訓練測試集]
C --> D[初始化2-2-1的NN]
D --> E[依照Epoch重複訓練]
E --> F[預測並分類]
F --> G[記錄誤差並繪製圖表]
G --> H{判斷是否已達設定Epoch}
H --> |是| I[將圖片組合為GIF動畫]
H --> |否| L[繼續下個Epoch]
L --> E




