久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)

        Python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)

        來(lái)源:千鋒教育
        發(fā)布人:xqq
        時(shí)間: 2023-11-08 00:32:48 1699374768

        首先實(shí)現(xiàn)幾個(gè)工具函數(shù):

        defrand(a,b):

        return(b-a)*random.random()+a

        defmake_matrix(m,n,fill=0.0):#創(chuàng)造一個(gè)指定大小的矩陣

        mat=[]

        foriinrange(m):

        mat.append([fill]*n)

        returnmat

        定義sigmod函數(shù)和它的導(dǎo)數(shù):

        defsigmoid(x):

        return1.0/(1.0+math.exp(-x))

        defsigmod_derivate(x):

        returnx*(1-x)

        定義BPNeuralNetwork類,使用三個(gè)列表維護(hù)輸入層,隱含層和輸出層神經(jīng)元,列表中的元素代表對(duì)應(yīng)神經(jīng)元當(dāng)前的輸出值.使用兩個(gè)二維列表以鄰接矩陣的形式維護(hù)輸入層與隱含層,隱含層與輸出層之間的連接權(quán)值,通過(guò)同樣的形式保存矯正矩陣.

        定義setup方法初始化神經(jīng)網(wǎng)絡(luò):

        defsetup(self,ni,nh,no):

        self.input_n=ni+1

        self.hidden_n=nh

        self.output_n=no

        #initcells

        self.input_cells=[1.0]*self.input_n

        self.hidden_cells=[1.0]*self.hidden_n

        self.output_cells=[1.0]*self.output_n

        #initweights

        self.input_weights=make_matrix(self.input_n,self.hidden_n)

        self.output_weights=make_matrix(self.hidden_n,self.output_n)

        #randomactivate

        foriinrange(self.input_n):

        forhinrange(self.hidden_n):

        self.input_weights[i][h]=rand(-0.2,0.2)

        forhinrange(self.hidden_n):

        foroinrange(self.output_n):

        self.output_weights[h][o]=rand(-2.0,2.0)

        #initcorrectionmatrix

        self.input_correction=make_matrix(self.input_n,self.hidden_n)

        self.output_correction=make_matrix(self.hidden_n,self.output_n)

        定義predict方法進(jìn)行一次前饋,并返回輸出:

        defpredict(self,inputs):

        #activateinputlayer

        foriinrange(self.input_n-1):

        self.input_cells[i]=inputs[i]

        #activatehiddenlayer

        forjinrange(self.hidden_n):

        total=0.0

        foriinrange(self.input_n):

        total+=self.input_cells[i]*self.input_weights[i][j]

        self.hidden_cells[j]=sigmoid(total)

        #activateoutputlayer

        forkinrange(self.output_n):

        total=0.0

        forjinrange(self.hidden_n):

        total+=self.hidden_cells[j]*self.output_weights[j][k]

        self.output_cells[k]=sigmoid(total)

        returnself.output_cells[:]

        定義back_propagate方法定義一次反向傳播和更新權(quán)值的過(guò)程,并返回最終預(yù)測(cè)誤差:

        defback_propagate(self,case,label,learn,correct):

        #feedforward

        self.predict(case)

        #getoutputlayererror

        output_deltas=[0.0]*self.output_n

        foroinrange(self.output_n):

        error=label[o]-self.output_cells[o]

        output_deltas[o]=sigmod_derivate(self.output_cells[o])*error

        #gethiddenlayererror

        hidden_deltas=[0.0]*self.hidden_n

        forhinrange(self.hidden_n):

        error=0.0

        foroinrange(self.output_n):

        error+=output_deltas[o]*self.output_weights[h][o]

        hidden_deltas[h]=sigmod_derivate(self.hidden_cells[h])*error

        #updateoutputweights

        forhinrange(self.hidden_n):

        foroinrange(self.output_n):

        change=output_deltas[o]*self.hidden_cells[h]

        self.output_weights[h][o]+=learn*change+correct*self.output_correction[h][o]

        self.output_correction[h][o]=change

        #updateinputweights

        foriinrange(self.input_n):

        forhinrange(self.hidden_n):

        change=hidden_deltas[h]*self.input_cells[i]

        self.input_weights[i][h]+=learn*change+correct*self.input_correction[i][h]

        self.input_correction[i][h]=change

        #getglobalerror

        error=0.0

        foroinrange(len(label)):

        error+=0.5*(label[o]-self.output_cells[o])**2

        returnerror

        定義train方法控制迭代,該方法可以修改最大迭代次數(shù),學(xué)習(xí)率λ,矯正率μ三個(gè)參數(shù).

        deftrain(self,cases,labels,limit=10000,learn=0.05,correct=0.1):

        foriinrange(limit):

        error=0.0

        foriinrange(len(cases)):

        label=labels[i]

        case=cases[i]

        error+=self.back_propagate(case,label,learn,correct)

        編寫(xiě)test方法,演示如何使用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)異或邏輯:

        deftest(self):

        cases=[

        [0,0],

        [0,1],

        [1,0],

        [1,1],

        ]

        labels=[[0],[1],[1],[0]]

        self.setup(2,5,1)

        self.train(cases,labels,10000,0.05,0.1)

        forcaseincases:

        print(self.predict(case))

        以上內(nèi)容為大家介紹了Python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò),希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        python 插入排序

        原理插入排序(InsertionSort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到...詳情>>

        2023-11-08 02:56:48
        python 的面試題

        問(wèn)題1到底什么是Python?你可以在回答中與其他技術(shù)進(jìn)行對(duì)比(也鼓勵(lì)這樣做)。答案下面是一些關(guān)鍵點(diǎn):Python是一種解釋型語(yǔ)言。這就是說(shuō),與C語(yǔ)言...詳情>>

        2023-11-08 02:17:12
        python的keras訓(xùn)練

        Keras模型在輸入數(shù)據(jù)和標(biāo)簽的Numpy矩陣上進(jìn)行訓(xùn)練。為了訓(xùn)練一個(gè)模型,你通常會(huì)使用fit函數(shù)。文檔詳見(jiàn)此處。fit(self,x,y,batch_size=32,epochs...詳情>>

        2023-11-08 01:59:12
        Python 類和實(shí)例的屬性

        類屬性.類屬性是可以直接通過(guò)“類名.屬性名”來(lái)訪問(wèn)和修改。.類屬性是這個(gè)類的所有實(shí)例對(duì)象所共有的屬性,任意一個(gè)實(shí)例對(duì)象都可以訪問(wèn)并修改這...詳情>>

        2023-11-08 01:44:48
        python 小數(shù)據(jù)池

        1.python中的id,is,===id=>id是內(nèi)存地址is=>比較兩邊的內(nèi)存是否相等===>比較兩邊的數(shù)值是否相等==>是賦值2.小數(shù)據(jù)池的緩存機(jī)制小數(shù)據(jù)池,也稱為...詳情>>

        2023-11-08 01:30:24
        宜阳县| 柳河县| 望江县| 乌拉特后旗| 迭部县| 汽车| 贵阳市| 麻城市| 珲春市| 通江县| 揭西县| 韶山市| 新乡县| 西乌珠穆沁旗| 始兴县| 乌兰浩特市| 东辽县| 邳州市| 永清县| 自治县| 化隆| 合作市| 肃宁县| 循化| 敖汉旗| 景泰县| 阜康市| 大埔区| 兴化市| 聂拉木县| 博湖县| 高要市| 舟山市| 双城市| 林芝县| 横峰县| 探索| 沙雅县| 巴南区| 宜春市| 墨江|