建立感知器 Creating Perceptron
(原講義為 Matlab 手冊的英文截圖,以下改寫為中文,程式碼改成可複製的文字。)
用 newp 建立感知器 newp
net = newp(PR, S)
| 引數 | 意義 |
|---|---|
PR | R × 2 矩陣,每一列是一個輸入元素的最小值與最大值(共 R 個輸入元素) |
S | 神經元個數 |
感知器通常使用 hardlim 轉移函數,所以它是預設值。下面建立一個感知器:單一個只有一個元素的輸入向量、一個神經元,輸入範圍為 [0 2]:
net = newp([0 2], 1);
檢視建立的網路 Inspecting the Network
inputweights = net.inputweights{1,1}
inputweights =
delays: 0
initFcn: 'initzero'
learn: 1
learnFcn: 'learnp'
learnParam: []
size: [1 1]
userdata: [1x1 struct]
weightFcn: 'dotprod'
- 預設的學習函數是
learnp,見感知器的學習規則。 - 權值函數
dotprod計算權值矩陣與輸入向量的乘積 \(\mathbf{Wp}\)。 - 預設的初始化函數
initzero把權值的初值設為 0。
biases = net.biases{1}
biases =
initFcn: 'initzero'
learn: 1
learnFcn: 'learnp'
learnParam: []
size: 1
userdata: [1x1 struct]
▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 1 節 newp),可以直接在瀏覽器執行、修改參數。⬇ 下載 NN.ipynb
可見偏權值的預設初值也是 0。
編註:原文說 dotprod「產生輸入向量與權值矩陣的乘積,並加上偏權值,得到淨輸入」。其實 dotprod 只負責 \(\mathbf{Wp}\);加上偏權值的是層的淨輸入函數
netsum。課程附檔可以佐證:NnetAnd.mat 裡 newp 建立的網路,層的 netInputFcn 是 'netsum';由它產生的 Simulink 模型 NetAndmdl.mdl 中,dotprod 方塊之後另有一個名為 netsum 的加法方塊,才把 b 加進來(見 NN2Simulink)。(補充)以上是原講義所用工具箱版本的寫法。新版 Matlab(Deep Learning Toolbox)改用 perceptron 函數建立感知器,newp 已不建議使用。



