最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)感知器算法詳解

 更新時(shí)間:2021年10月11日 16:42:52   作者:修煉之路  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)感知器算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在1943年,沃倫麥卡洛可與沃爾特皮茨提出了第一個(gè)腦神經(jīng)元的抽象模型,簡(jiǎn)稱麥卡洛可-皮茨神經(jīng)元(McCullock-Pitts neuron)簡(jiǎn)稱MCP,大腦神經(jīng)元的結(jié)構(gòu)如下圖。麥卡洛可和皮茨將神經(jīng)細(xì)胞描述為一個(gè)具備二進(jìn)制輸出的邏輯門。樹突接收多個(gè)輸入信號(hào),當(dāng)輸入信號(hào)累加超過一定的值(閾值),就會(huì)產(chǎn)生一個(gè)輸出信號(hào)。弗蘭克羅森布拉特基于MCP神經(jīng)元提出了第一個(gè)感知器學(xué)習(xí)算法,同時(shí)它還提出了一個(gè)自學(xué)習(xí)算法,此算法可以通過對(duì)輸入信號(hào)和輸出信號(hào)的學(xué)習(xí),自動(dòng)的獲取到權(quán)重系數(shù),通過輸入信號(hào)與權(quán)重系數(shù)的乘積來判斷神經(jīng)元是否被激活(產(chǎn)生輸出信號(hào))。

一、感知器算法

我們將輸入信號(hào)定義為一個(gè)x向量,x=(x1,x2,x3..),將權(quán)重定義為ω=(ω1,ω2,ω3...)其中ω0的值為,將z定義為為兩個(gè)向量之間的乘積,所以輸出z=x1*ω1 + x2*ω2+....,然后將z通過激勵(lì)(激活)函數(shù),作為真正的輸出。其中激活函數(shù)是一個(gè)分段函數(shù),下圖是一個(gè)階躍函數(shù),當(dāng)輸入信號(hào)大于0的時(shí)候輸出為1,小于0的時(shí)候輸出為0,這里的階躍函數(shù)閾值設(shè)置為0了。定義激活函數(shù)為Φ(z),給激活函數(shù)Φ(z)設(shè)定一個(gè)閾值θ,當(dāng)激活函數(shù)的輸出大于閾值θ的時(shí)候,將輸出劃分為正類(1),小于閾值θ的時(shí)候?qū)⑤敵鰟澐譃樨?fù)類(-1)。如果,將閾值θ移到等式的左邊z=x1*ω1+x2*ω2+....+θ,我們可以將θ看作為θ=x0*ω0,其中輸出x0為1,ω0為-θ。將閾值θ移到等式的左邊之后,就相當(dāng)于激活函數(shù)的閾值由原來的θ變成了0。

感知器算法的工作過程:

1、將權(quán)重ω初始化為零或一個(gè)極小的隨機(jī)數(shù)。

2、迭代所有的訓(xùn)練樣本(已知輸入和輸出),執(zhí)行如下操作:

a、通過權(quán)重和已知的輸入計(jì)算輸出

b、通過a中的輸出與已知輸入的輸出來更新權(quán)重

權(quán)重的更新過程,如上圖的公式,其中ω與x都是相對(duì)應(yīng)的(當(dāng)ω為ω0的時(shí)候,x為1),η為學(xué)習(xí)率介于0到1之間的常數(shù),其中y為輸入所對(duì)應(yīng)的輸出,后面的y(打不出來)為a中所計(jì)算出來的輸出。通過迭代對(duì)權(quán)重的更新,當(dāng)遇到類標(biāo)預(yù)測(cè)錯(cuò)誤的情況下,權(quán)重的值會(huì)趨于正類別和負(fù)類別的方向。

第一個(gè)公式表示的是,當(dāng)真實(shí)的輸出為1的情況下,而預(yù)測(cè)值為-1,所以我們就需要增加權(quán)重來使得預(yù)測(cè)值往1靠近。

第二個(gè)公式表示的是,當(dāng)真實(shí)的輸出為-1的情況下,而預(yù)測(cè)值為1,所以我們就需要減少權(quán)重來使得預(yù)測(cè)值往-1靠近。

注意:感知器收斂的前提是兩個(gè)類別必須是線性可分的,且學(xué)習(xí)率足夠小。如果兩個(gè)類別無法通過一個(gè)線性決策邊界進(jìn)行劃分,我們可以設(shè)置一個(gè)迭代次數(shù)或者一個(gè)判斷錯(cuò)誤樣本的閾值,否則感知器算法會(huì)一直運(yùn)行下去。

最后,用一張圖來表示感知器算法的工作過程

二、python實(shí)現(xiàn)感知器算法

import numpy as np 
 
class Perceptron(object): 
  ''''' 
  輸入?yún)?shù): 
  eta:學(xué)習(xí)率,在0~1之間,默認(rèn)為0.01 
  n_iter:設(shè)置迭代的次數(shù),默認(rèn)為10 
  屬性: 
  w_:一維數(shù)組,模型的權(quán)重 
  errors_:列表,被錯(cuò)誤分類的數(shù)據(jù) 
  ''' 
  #初始化對(duì)象 
  def __init__(self,eta=0.01,n_iter=10): 
    self.eta = eta 
    self.n_iter = n_iter 
  #根據(jù)輸入的x和y訓(xùn)練模型 
  def fit(self,x,y): 
    #初始化權(quán)重 
    self.w_ = np.zeros(1 + x.shape[1]) 
    #初始化錯(cuò)誤列表 
    self.errors_=[] 
    #迭代輸入數(shù)據(jù),訓(xùn)練模型 
    for _ in range(self.n_iter): 
      errors = 0 
      for xi,target in zip(x,y): 
        #計(jì)算預(yù)測(cè)與實(shí)際值之間的誤差在乘以學(xué)習(xí)率 
        update = self.eta * (target - self.predict(xi)) 
        #更新權(quán)重 
        self.w_[1:] += update * xi 
        #更新W0 
        self.w_[0] += update * 1 
        #當(dāng)預(yù)測(cè)值與實(shí)際值之間誤差為0的時(shí)候,errors=0否則errors=1 
        errors += int(update != 0) 
      #將錯(cuò)誤數(shù)據(jù)的下標(biāo)加入到列表中 
      self.errors_.append(errors) 
    return self 
  #定義感知器的傳播過程 
  def net_input(self,x): 
    #等價(jià)于sum(i*j for i,j in zip(x,self.w_[1:])),這種方式效率要低于下面 
    return np.dot(x,self.w_[1:]) + self.w_[0] 
  #定義預(yù)測(cè)函數(shù) 
  def predict(self,x): 
    #類似于三元運(yùn)算符,當(dāng)self.net_input(x) >= 0.0 成立時(shí)返回1,否則返回-1 
    return np.where(self.net_input(x) >= 0.0 , 1 , -1) 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • caffe binaryproto 與 npy相互轉(zhuǎn)換的實(shí)例講解

    caffe binaryproto 與 npy相互轉(zhuǎn)換的實(shí)例講解

    今天小編就為大家分享一篇caffe binaryproto 與 npy相互轉(zhuǎn)換的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題

    解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題

    今天小編就為大家分享一篇解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python二進(jìn)制文件的轉(zhuǎn)譯詳解

    python二進(jìn)制文件的轉(zhuǎn)譯詳解

    這篇文章主要介紹了python二進(jìn)制文件的轉(zhuǎn)譯詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python表示當(dāng)前時(shí)間的方法合集

    Python表示當(dāng)前時(shí)間的方法合集

    在 Python 中獲取當(dāng)前時(shí)間是許多與時(shí)間有關(guān)的操作的一個(gè)很好的起點(diǎn)。一個(gè)非常重要的用例是創(chuàng)建時(shí)間戳。在本教程中,你將學(xué)習(xí)如何用 datetime 模塊獲取、顯示和格式化當(dāng)前時(shí)間
    2023-01-01
  • python線程池如何使用

    python線程池如何使用

    在本篇文章里小編給各位分享的是關(guān)于python中的線程池用法及實(shí)例內(nèi)容,需要的朋友們可以參考下。
    2020-05-05
  • Flask之flask-session的具體使用

    Flask之flask-session的具體使用

    這篇文章主要介紹了Flask之flask-session的具體使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python 占位符的使用方法詳解

    Python 占位符的使用方法詳解

    這篇文章主要介紹了Python 占位符的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python讀取JSON文件及一些常見的陷阱和改進(jìn)方法

    Python讀取JSON文件及一些常見的陷阱和改進(jìn)方法

    在Python編程中處理JSON文件是一項(xiàng)基本但關(guān)鍵的技能,文章通過一個(gè)簡(jiǎn)單的讀取JSON文件的代碼示例出發(fā),分析了代碼中存在的問題,將遇到的問題解決方法介紹也非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Python實(shí)現(xiàn)打印螺旋矩陣功能的方法

    Python實(shí)現(xiàn)打印螺旋矩陣功能的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)打印螺旋矩陣功能的方法,簡(jiǎn)單描述了螺旋矩陣的概念、原理及Python實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-11-11
  • pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例

    pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例

    這篇文章主要介紹了pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例,本文講解了pygame窗口、窗口退出、pygame中的顏色、圓形、矩形及一個(gè)完整實(shí)例,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

洮南市| 西林县| 宁都县| 余姚市| 平江县| 利川市| 伊春市| 博爱县| 兖州市| 集安市| 浦北县| 彭阳县| 巴彦淖尔市| 房产| 新昌县| 陇南市| 江口县| 张掖市| 仲巴县| 神农架林区| 桦川县| 平山县| 五华县| 剑河县| 上杭县| 麟游县| 京山县| 梁山县| 广丰县| 宝丰县| 司法| 西峡县| 大埔区| 尉犁县| 宁化县| 清涧县| 克山县| 杭锦后旗| 普兰县| 宁南县| 永安市|