91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

      手機站
      千鋒教育

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

      千鋒教育

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

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

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

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

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

      來源:千鋒教育
      發(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ù)和它的導(dǎo)數(shù):

      defsigmoid(x):

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

      defsigmod_derivate(x):

      returnx*(1-x)

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

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

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

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費領(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