国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

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

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

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

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

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

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

            defrand(a,b):

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

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

            mat=[]

            foriinrange(m):

            mat.append([fill]*n)

            returnmat

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

            defsigmoid(x):

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

            defsigmod_derivate(x):

            returnx*(1-x)

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

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

            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方法進行一次前饋,并返回輸出:

            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)值的過程,并返回最終預測誤差:

            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ù),學習率λ,矯正率μ三個參數(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)

            編寫test方法,演示如何使用神經(jīng)網(wǎng)絡學習異或邏輯:

            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實現(xiàn)BP神經(jīng)網(wǎng)絡,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓機構(gòu):千鋒教育。

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