python實現(xiàn)感知器
上篇博客轉(zhuǎn)載了關(guān)于感知器的用法,遂這篇做個大概總結(jié),并實現(xiàn)一個簡單的感知器,也為了加深自己的理解。
感知器是最簡單的神經(jīng)網(wǎng)絡(luò),只有一層。感知器是模擬生物神經(jīng)元行為的機(jī)器。感知器的模型如下:

給定一個n維的輸入 ,其中w和b是參數(shù),w為權(quán)重,每一個輸入對應(yīng)一個權(quán)值,b為偏置項,需要從數(shù)據(jù)中訓(xùn)練得到。
激活函數(shù) 感知器的激活函數(shù)可以有很多選擇,比如我們可以選擇下面這個階躍函數(shù)f來作為激活函數(shù):

輸出為:

事實上感知器可以擬合任何線性函數(shù),任何線性分類或線性回歸的問題都可以用感知器來解決。但是感知器不能實現(xiàn)異或運(yùn)算,當(dāng)然所有的線性分類器都不可能實現(xiàn)異或操作。
所謂異或操作:

二維分布圖為:

對于上圖,我們找不到一條直線可以將0,1類分開。對于and操作,感知器可以實現(xiàn),我們可以找到一條直線把其分為兩部分。。
對于and操作:

對應(yīng)的二維分布圖為:

感知器的訓(xùn)練
首先將權(quán)重w和 偏置b隨機(jī)初始化為一個很小的數(shù),然后在訓(xùn)練中不斷更新w和b的值。
1.將權(quán)重初始化為 0 或一個很小的隨機(jī)數(shù)
2.對于每個訓(xùn)練樣本 x(i) 執(zhí)行下列步驟:
計算輸出值 y^.
更新權(quán)重

其中
下面用感知器實現(xiàn)and操作,具體代碼如下:
# -*- coding: utf-8 -*- # python 3.4 import numpy as np from random import choice from sklearn import cross_validation from sklearn.linear_model import LogisticRegression ''''' 1.將權(quán)重初始化為 0 或一個很小的隨機(jī)數(shù) 2.對于每個訓(xùn)練樣本 x(i) 執(zhí)行下列步驟: 計算輸出值 y^. 更新權(quán)重 ''' def load_data(): input_data=[[1,1], [0,0], [1,0], [0,1]] labels=[1,0,0,0] return input_data,labels def train_pre(input_data,y,iteration,rate): #=========================== ''''' 參數(shù): input_data:輸入數(shù)據(jù) y:標(biāo)簽列表 iteration:訓(xùn)練輪數(shù) rate:學(xué)習(xí)率 ''' #============================ unit_step = lambda x: 0 if x < 0 else 1 w=np.random.rand(len(input_data[0]))#隨機(jī)生成[0,1)之間,作為初始化w bias=0.0#偏置 for i in range(iteration): samples= zip(input_data,y) for (input_i,label) in samples:#對每一組樣本 #計算f(w*xi+b),此時x有兩個 result=input_i*w+bias result=float(sum(result)) y_pred=float(unit_step(result))#計算輸出值 y^ w=w+rate*(label-y_pred)*np.array(input_i)#更新權(quán)重 bias=rate*(label-y_pred)#更新bias return w,bias def predict(input_i,w,b): unit_step = lambda x: 0 if x < 0 else 1#定義激活函數(shù) result=result=result=input_i*w+b result=sum(result) y_pred=float(unit_step(result)) print(y_pred) if __name__=='__main__': input_data,y=load_data() w,b=train_pre(input_data,y,20,0.01) predict([1,1],w,b)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解運(yùn)行Python的神器Jupyter Notebook
如果我們想要運(yùn)行Python,就是在Python或者IPython的解釋器環(huán)境中進(jìn)行交互式運(yùn)行,或者程序員最喜歡的編寫.py文件,在文件中編寫python代碼,然后運(yùn)行。如果想寫一篇Python的文章,里面有代碼,還希望代碼在當(dāng)前頁面運(yùn)行,那就是使用我們今天要介紹的Jupyter Notebook。2021-06-06
Python光學(xué)仿真實現(xiàn)波長與顏色之間對應(yīng)關(guān)系示例解析
這篇文章主要為大家介紹了Python光學(xué)仿真實現(xiàn)波長與顏色之間對應(yīng)關(guān)系的示例解析,有需要的我朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
使用Python對微信好友進(jìn)行數(shù)據(jù)分析
這篇文章主要介紹了使用Python對微信好友進(jìn)行數(shù)據(jù)分析的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06
python pandas dataframe 按列或者按行合并的方法
下面小編就為大家分享一篇python pandas dataframe 按列或者按行合并的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python?數(shù)據(jù)分析教程探索性數(shù)據(jù)分析
這篇文章主要介紹了Python?數(shù)據(jù)分析教程探索性數(shù)據(jù)分析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08

