當我們最初學習機器學習時候,了解到最簡單的神經網路可能便是單層感知器,他也是監督學習的最簡單一種。本文章就通過《人工神經網路理論、設計及應用》書中介紹的單層感知器一節,進行python的**實現。
單層感知器的網路結構如下:
上圖便是乙個單層感知器,很簡單的乙個結構,圖中說明我們有個3維的輸入值分別是x1、x2、x3,輸入端和其上的權值0.3相乘,然後將乘積相加後,最後通過啟用函式對乘積和進行處理得到輸出值y。
感知器學習演算法:
採用感知器學習規則(對誤差平方求導推極值問題),考慮到訓練過程是感知器權值隨每一步調整改變的過程,為此用t表示學習的迭代次數,權值看作t的函式。t=0表示學習開始前的初始狀態,此時對應的權值為初始化值。訓練可按如下步驟進行:
(1)、對各權值
(m為計算層的節點數)賦予較小的非零隨機數;
(2)、輸入樣本對 ,x是訓練樣本,d是樣本的目標值;
(3)、計算各節點的實際輸出
(t) = sgn[
(t)
] , j =1 ,2 ...... m;
(4)、調整各節點的權值
(t+1) =
+ [
] ,j=1,2......m;其中
為學習率,用於控制調整速度,學習率太大會影響訓練的穩定性,太小則使訓練的收斂速度變慢,一般取值範圍0<
1;(5)、返回到步驟2輸入下一對樣本
好了,有了上面的基本知識後,我們通過簡單的python**來實現單層感知網路。比如我們有如下圖的例子:
首先建立資料集
import numpy as np
#建立資料集
x = np.mat([[1,0,0],[1,0,1],[1,1,0],[1,1,1],[0,0,1],[0,1,0],[0,1,1],[0,0,0]])
y = np.mat([[-1],[1],[1],[1],[-1],[-1],[1],[-1],])
#設定初始權值和偏置值
w = np.mat([0.3,0.3,0.3])
baise = 0.4
#學習率
rate = 0.01
#啟用函式
def sgn(x):
return np.where(x >= 0.0, 1, -1)
#通過學習規則,進行迭代
for i in range(1000):
#誤差計算
errors = 0
for j in range(len(x)):
#誤差計算
r = rate*(y[j] - sgn(x[j]*w.t+baise))
#r = rate*(y[j] - (x[j]*w.t+baise))
#調整權值
w += r*x[j]
baise += r
#誤差計算
errors += abs(r)
print(i,' iter :error is ', errors)
if errors ==0:
break
下圖,是我執行上面程式的結果,可以看到迭代了8次後,誤差為0:
通過計算出來的權值w和偏置值baise進行驗證模型是否正確:
sgn(x*w.t+baise)
可以看到模型的輸出和實際y的值一模一樣:
深度學習PART I 單層感知器
單層感知器的原始形式如下 如果把偏置項當作特殊權值,則單層感知器可以改為如下形式 感知器的學習規則 學習率 1 學習率太大,容易造成權值調整不穩定。2 學習率太小,權值調整太慢,迭代次數太多。收斂條件 1 誤差小於某個預先設定的較小的值。2 兩次迭代之間的權值變化已經很小。3 設定最大迭代次數,當迭...
深度學習之單層感知器1
w的調整值 學習率 期望輸出 實際輸出 與w相對應輸入節點x 學習率一般取0到1之間,學習率太大容易造成權值調整不穩定,學習率太小容易造成權值調整太慢,迭代次數過多。1.誤差小於某個預先設定的值 2.設定最大迭代次數 假設平面座標系上有三個點,3,3 4,3 這兩個點的標籤為1,1,1 這個點標籤為...
學習筆記 感知器 單層感知器舉例
在人體神經網路中,神經細胞是有著基本處理訊號功能的基本單元,單層感知器就是人工神經網路中模擬人體神經細胞的基本單元。單層感知器 單層感知器是最簡單的神經網路,它包含輸入層和輸出層,訊號先經過線性組合器處理然後再經過啟用函式,最後輸出結果。1 輸入節點 input 輸入節點是訊號的輸入端,感知器可以有...