神经网络学习(1)————单层感知器以及python实现
一、感知器模型
單層感知器是感知器中最簡單的一種,有單個神經元組成的單層感知器只能用于解決線性可分的二分性問題。在空間中如果輸入的數據是可分的,感知器相當于將輸入的數據在空間中分為兩類,已經證明,如果線性可分則算法一定收斂。單層感知器是指只有一層處理單元的感知器,其中輸入層沒有處理數據的能力,輸入層有n個神經元結點,每個結點接受一個輸入信號xi,輸入層與輸出層之前有權重w,將每個結點組成的輸入矩陣和權值矩陣相乘,得到一個數,將這個數作為凈輸入傳遞給神經元細胞,再將凈輸入代入神經元細胞的激活函數中,并且在神經元中還有一個外部偏置b,激活函數在這里一般采用符號函數,然后輸出一個數。
數學表示:輸入矩陣:X=(X1,X2,X3,X4,X5,……Xn);
?????? ?? 權值矩陣:W=(W1j,W2j,W3j,W4j,……Wnj);
?????? ?? 輸出矩陣:Y=(Y1,Y2,Y3,……Ym);
下圖是單層感知器模型:
??
在輸出層的每一個節點上接受來自輸入層的加權和作為輸出層的凈輸入:
輸出的值由激活函數決定:
?
二、單層感知器的學習算法
其中,L1為一類,L2為另一類;為學習率,它的值決定了誤差對權值的影響大小,值不應該過大,以便為輸入向量提供一個比較穩定的權值估計;值也不能過小,
收斂條件:當權值向量已經能正確實現分類時,算法就收斂了。計算時收斂條件通常是:1)理想值和計算得出的值得差小于一個提前設定的值;2)權值兩次變化的值小于一個提前設定的值;3)設定一個最大迭代數M。
?
三、局限性和解決途徑
單層感知器可以實現線性可分的問題,一旦出現非線性問題則無效。
解決這一局限的有效辦法是,在輸入層和輸出層之間引入隱層,將單計算層感知器變成多計算層感知器。
??? 當單隱層感知器具有多個結點時,結點數量增加可以多邊形凸域的邊數,從而在輸入空間構建出任意形狀的凸域,如果在此基礎上再增加一層,成為第二個隱層,則該層的每個節點確定一個凸域,各種凸域組合成為任意形狀域。如圖:
提高分類能力的另一個途徑就是采用非線性連續函數作為神經元結點的激活函數,也叫轉移函數。
多層感知器從理論上可解決線性不可分問題,但是從前面的學習規則可知,權值的調整取決于感知器期望輸出與實際輸出之差,但是對于各隱層結點來說,不存在期望輸出,因此該學習規則對隱層權值不適用。
多層感知器能提高網絡的分類能力,但是沒有提出關于權值調整的有效算法。后來有學者對具有非線性連續激活函數的多層感知器進行分析,得出了BP網絡,實現了多層感知器的設想。
?
單層感知器包括輸入結點、輸出節點、權向量、偏執因子、激活函數、學習率等。
?
?
?
訓練的目的是找到合適的權值和偏置因子。
最后是python實現:
# -*- coding: utf-8 -*- """ Created on Thu Sep 27 19:33:12 2018@author: Heisenberg """import numpy as np import matplotlib.pyplot as mpl#輸入數據矩陣 X=np.array([[1,2,3],[1,4,3],[1,5,8]])#為簡單起見,第一項為偏置向量,設置為1; #目標函數 Y=np.array([1,1,-1]) #權值初始化 W=(np.random.random(3)-0.5)*2#第一項為偏置值,權值矩陣取值范圍為[-1,1]. print(W) #學習率 lr =0.1 #迭代次數 n=0 #神經網絡輸出 o=0 #權值更新 def update():global X,Y,W,lr,nn=n+1O=np.sign(np.dot(X,W)) #實際輸出W1=lr*((Y-O).dot(X))#a.dot(b)和dot(a,b)效果一樣,這里Y根據屬于哪一類值為1或者-1,W = W + W1for i in range(100):update()#更新權值print(W)print(n)O=np.sign(np.dot(X,W)) #實際輸出if(O==Y).all():print("完成")print("迭代次數:",n)break#實例部分 #正樣本 x1=[2,4] y1=[3,3] #負樣本 x2=[5] y2=[8] #計算分界線斜率以及截距 k=-W[1]/W[2] d=-W[0]/W[2] print("斜率=",k) print("截距=",d) #x軸的刻度劃分一個8個刻度 xdata=np.linspace(0,8)mpl.figure()#調用函數創建一個繪圖對象,并且使他成為當前的繪圖對象 mpl.plot(xdata,xdata*k+d,'r')# r代表是紅色 mpl.plot(x1,y1,'bo') #x1,y1的倆個點用藍色圓圈標記 mpl.plot(x2,y2,'yo') #黃色標記 mpl.show()計算結果:
總結
以上是生活随笔為你收集整理的神经网络学习(1)————单层感知器以及python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7安装WPS打开无反应
- 下一篇: 学生类