Backpropagation
程式架構
|
|
主程式
|
|
- 讀入資料
- 建立 Neural Network 的 Agent
- 訓練模型
- evaluate 訓練結果,並畫圖
Neural Network
|
|
神經網路結構:
- input layer 為 2 個 neural (x, y)
- hidden layer 為兩層各 4 個 neural
- output layer 為 1 個 neural (0~1)
建構式:
- 初始化 learning rate
- 因為有 2 層 hidden layer,所以共有 3 個 weights
forward:
- 將 input 建立成 1x2 的 vector
- 與 weights1 做矩陣乘法,得到 hidden layer 1 (1x4)
- 與 weights2 做矩陣乘法,得到 hidden layer 2 (1x4)
- 與 weights2 做矩陣乘法,得到 output layer (1x1)
backward:
- 透過 loss function (sum of square error) 的梯度計算 weights3 的 loss3
- 反向傳播計算 loss2
- 反向傳播計算 loss1
- 將 loss 乘上 learning rate 調整 weights
Agent
|
|
建構式:
- 建立 nn 的 instance
- 儲存 data 與 initialize loss 與 accuracy 的 array
main():
- 共進行 10001 次的訓練 (0~10000)
- 將訓練結果紀錄
- 每 1000 次 print 出當前的 loss 與 accuracy
train():
- 對 data 內的每個 entry 進行 forward
- 將結果 backward 並調整神經網路
- 累加 loss 與計算預測結果
predict():
- 對 data 內的每個 entry 進行 forward 不 backward
- return 整個 data 的預測結果
執行結果
Train
epochs 0 loss: 30.277324475025709246 accuracy: 0.49
epochs 1000 loss: 0.024934396168262030844 accuracy: 1.0
epochs 2000 loss: 0.008230372203206555887 accuracy: 1.0
epochs 3000 loss: 0.0048464426050304105523 accuracy: 1.0
epochs 4000 loss: 0.0034139119408884769078 accuracy: 1.0
epochs 5000 loss: 0.002627065551047310526 accuracy: 1.0
epochs 6000 loss: 0.002131124670777076718 accuracy: 1.0
epochs 7000 loss: 0.0017905544571033081806 accuracy: 1.0
epochs 8000 loss: 0.0015425349580361289617 accuracy: 1.0
epochs 9000 loss: 0.0013540187649136039913 accuracy: 1.0
epochs 10000 loss: 0.001205983589243599169 accuracy: 1.0