欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)多層感知器MLP(基于雙月數(shù)據(jù)集)

 更新時(shí)間:2021年10月11日 16:41:21   作者:moge19  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)多層感知器MLP,基于雙月數(shù)據(jù)集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python實(shí)現(xiàn)多層感知器MLP的具體代碼,供大家參考,具體內(nèi)容如下

1、加載必要的庫(kù),生成數(shù)據(jù)集

import math
import random
import matplotlib.pyplot as plt
import numpy as np
class moon_data_class(object):
  def __init__(self,N,d,r,w):
    self.N=N
    self.w=w
   
    self.d=d
    self.r=r
  
  
  def sgn(self,x):
    if(x>0):
      return 1;
    else:
      return -1;
    
  def sig(self,x):
    return 1.0/(1+np.exp(x))
  
    
  def dbmoon(self):
    N1 = 10*self.N
    N = self.N
    r = self.r
    w2 = self.w/2
    d = self.d
    done = True
    data = np.empty(0)
    while done:
      #generate Rectangular data
      tmp_x = 2*(r+w2)*(np.random.random([N1, 1])-0.5)
      tmp_y = (r+w2)*np.random.random([N1, 1])
      tmp = np.concatenate((tmp_x, tmp_y), axis=1)
      tmp_ds = np.sqrt(tmp_x*tmp_x + tmp_y*tmp_y)
      #generate double moon data ---upper
      idx = np.logical_and(tmp_ds > (r-w2), tmp_ds < (r+w2))
      idx = (idx.nonzero())[0]
   
      if data.shape[0] == 0:
        data = tmp.take(idx, axis=0)
      else:
        data = np.concatenate((data, tmp.take(idx, axis=0)), axis=0)
      if data.shape[0] >= N:
        done = False
    #print (data)
    db_moon = data[0:N, :]
    #print (db_moon)
    #generate double moon data ----down
    data_t = np.empty([N, 2])
    data_t[:, 0] = data[0:N, 0] + r
    data_t[:, 1] = -data[0:N, 1] - d
    db_moon = np.concatenate((db_moon, data_t), axis=0)
    return db_moon

2、定義激活函數(shù)

def rand(a,b):
  return (b-a)* random.random()+a

def sigmoid(x):
  #return np.tanh(-2.0*x)
  return 1.0/(1.0+math.exp(-x))
def sigmoid_derivate(x):
  #return -2.0*(1.0-np.tanh(-2.0*x)*np.tanh(-2.0*x))
  return x*(1-x) #sigmoid函數(shù)的導(dǎo)數(shù)

3、定義神經(jīng)網(wǎng)絡(luò)

class BP_NET(object):
  def __init__(self):
    self.input_n = 0
    self.hidden_n = 0
    self.output_n = 0
    self.input_cells = []
    self.bias_input_n = []
    self.bias_output = []
    self.hidden_cells = []
    self.output_cells = []
    self.input_weights = []
    self.output_weights = []
    
    self.input_correction = []
    self.output_correction = []
  
  def setup(self, ni,nh,no):
    self.input_n = ni+1#輸入層+偏置項(xiàng)
    self.hidden_n = nh
    self.output_n = no
    self.input_cells = [1.0]*self.input_n
    self.hidden_cells = [1.0]*self.hidden_n
    self.output_cells = [1.0]*self.output_n
    
    self.input_weights = make_matrix(self.input_n,self.hidden_n)
    self.output_weights = make_matrix(self.hidden_n,self.output_n)
    
    for i in range(self.input_n):
      for h in range(self.hidden_n):
        self.input_weights[i][h] = rand(-0.2,0.2)
    
    for h in range(self.hidden_n):
      for o in range(self.output_n):
        self.output_weights[h][o] = rand(-2.0,2.0)
    
    self.input_correction = make_matrix(self.input_n , self.hidden_n)
    self.output_correction = make_matrix(self.hidden_n,self.output_n)
        
  def predict(self,inputs):
    for i in range(self.input_n-1):
      self.input_cells[i] = inputs[i]
    
    for j in range(self.hidden_n):
      total = 0.0
      for i in range(self.input_n):
        total += self.input_cells[i] * self.input_weights[i][j]
      self.hidden_cells[j] = sigmoid(total)
      
    for k in range(self.output_n):
      total = 0.0
      for j in range(self.hidden_n):
        total+= self.hidden_cells[j]*self.output_weights[j][k]# + self.bias_output[k]
        
      self.output_cells[k] = sigmoid(total)
    return self.output_cells[:]
  
  def back_propagate(self, case,label,learn,correct):
    #計(jì)算得到輸出output_cells
    self.predict(case)
    output_deltas = [0.0]*self.output_n
    error = 0.0
    #計(jì)算誤差 = 期望輸出-實(shí)際輸出
    for o in range(self.output_n):
      error = label[o] - self.output_cells[o] #正確結(jié)果和預(yù)測(cè)結(jié)果的誤差:0,1,-1
      output_deltas[o]= sigmoid_derivate(self.output_cells[o])*error#誤差穩(wěn)定在0~1內(nèi)
 
    hidden_deltas = [0.0] * self.hidden_n
    for j in range(self.hidden_n):
      error = 0.0
      for k in range(self.output_n):
        error+= output_deltas[k]*self.output_weights[j][k]
      hidden_deltas[j] = sigmoid_derivate(self.hidden_cells[j])*error 

    for h in range(self.hidden_n):
      for o in range(self.output_n):
        change = output_deltas[o]*self.hidden_cells[h]
        #調(diào)整權(quán)重:上一層每個(gè)節(jié)點(diǎn)的權(quán)重學(xué)習(xí)*變化+矯正率
        self.output_weights[h][o] += learn*change 
    #更新輸入->隱藏層的權(quán)重
    for i in range(self.input_n):
      for h in range(self.hidden_n):
        change = hidden_deltas[h]*self.input_cells[i]
        self.input_weights[i][h] += learn*change 
      
      
    error = 0
    for o in range(len(label)):
      for k in range(self.output_n):
        error+= 0.5*(label[o] - self.output_cells[k])**2
      
    return error
    
  def train(self,cases,labels, limit, learn,correct=0.1):

    for i in range(limit):        
      error = 0.0
      # learn = le.arn_speed_start /float(i+1)    
      for j in range(len(cases)):
        case = cases[j]
        label = labels[j] 
             
        error+= self.back_propagate(case, label, learn,correct)
      if((i+1)%500==0):
        print("error:",error)
        
  def test(self): #學(xué)習(xí)異或

    
    N = 200
    d = -4
    r = 10
    width = 6
    
    data_source = moon_data_class(N, d, r, width)
    data = data_source.dbmoon()
    

    
    # x0 = [1 for x in range(1,401)]
    input_cells = np.array([np.reshape(data[0:2*N, 0], len(data)), np.reshape(data[0:2*N, 1], len(data))]).transpose()
    
    labels_pre = [[1.0] for y in range(1, 201)]
    labels_pos = [[0.0] for y in range(1, 201)]
    labels=labels_pre+labels_pos
    
    self.setup(2,5,1) #初始化神經(jīng)網(wǎng)絡(luò):輸入層,隱藏層,輸出層元素個(gè)數(shù)
    self.train(input_cells,labels,2000,0.05,0.1) #可以更改
    
    test_x = []
    test_y = []
    test_p = []
    
    y_p_old = 0
  
    for x in np.arange(-15.,25.,0.1):

      for y in np.arange(-10.,10.,0.1):
        y_p =self.predict(np.array([x, y]))

        if(y_p_old <0.5 and y_p[0] > 0.5):
          test_x.append(x)
          test_y.append(y)
          test_p.append([y_p_old,y_p[0]])
        y_p_old = y_p[0]
    #畫(huà)決策邊界
    plt.plot( test_x, test_y, 'g--')  
    plt.plot(data[0:N, 0], data[0:N, 1], 'r*', data[N:2*N, 0], data[N:2*N, 1], 'b*')
    plt.show()  
          

if __name__ == '__main__':
  nn = BP_NET()
  nn.test()

4、運(yùn)行結(jié)果

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

相關(guān)文章

  • 使用python實(shí)現(xiàn)微信小程序自動(dòng)簽到功能

    使用python實(shí)現(xiàn)微信小程序自動(dòng)簽到功能

    這篇文章主要介紹了使用python實(shí)現(xiàn)微信小程序自動(dòng)簽到功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python之如何將標(biāo)簽轉(zhuǎn)化為one-hot(獨(dú)熱編碼)

    python之如何將標(biāo)簽轉(zhuǎn)化為one-hot(獨(dú)熱編碼)

    這篇文章主要介紹了python之如何將標(biāo)簽轉(zhuǎn)化為one-hot(獨(dú)熱編碼)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python threading多線程編程實(shí)例

    Python threading多線程編程實(shí)例

    這篇文章主要介紹了Python threading多線程編程實(shí)例,本文講解了使用函數(shù)和線程類(lèi)實(shí)現(xiàn)多線程編程的例子,需要的朋友可以參考下
    2014-09-09
  • Pytorch參數(shù)注冊(cè)和nn.ModuleList nn.ModuleDict的問(wèn)題

    Pytorch參數(shù)注冊(cè)和nn.ModuleList nn.ModuleDict的問(wèn)題

    這篇文章主要介紹了Pytorch參數(shù)注冊(cè)和nn.ModuleList nn.ModuleDict的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python基礎(chǔ)之getpass模塊詳細(xì)介紹

    Python基礎(chǔ)之getpass模塊詳細(xì)介紹

    最近在看Python標(biāo)準(zhǔn)庫(kù)官方文檔的時(shí)候偶然發(fā)現(xiàn)了這個(gè)模塊。仔細(xì)一看內(nèi)容挺少的,只有兩個(gè)主要api,就花了點(diǎn)時(shí)間閱讀了一下源碼,感覺(jué)挺實(shí)用的,在這安利給大家。下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)之getpass模塊的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • Python實(shí)現(xiàn)名片管理系統(tǒng)

    Python實(shí)現(xiàn)名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • python執(zhí)行精確的小數(shù)計(jì)算方法

    python執(zhí)行精確的小數(shù)計(jì)算方法

    今天小編就為大家分享一篇python執(zhí)行精確的小數(shù)計(jì)算方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Pytorch 使用CNN圖像分類(lèi)的實(shí)現(xiàn)

    Pytorch 使用CNN圖像分類(lèi)的實(shí)現(xiàn)

    這篇文章主要介紹了Pytorch 使用CNN圖像分類(lèi)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python sklearn常用分類(lèi)算法模型的調(diào)用

    python sklearn常用分類(lèi)算法模型的調(diào)用

    這篇文章主要介紹了python sklearn常用分類(lèi)算法模型的調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python入門(mén)之布爾值詳解

    Python入門(mén)之布爾值詳解

    Python中布爾值(Booleans)表示以下兩個(gè)值之一:True或False。本文主要介紹布爾值(Booleans)的使用,和使用時(shí)需要注意的地方,需要的可以參考一下
    2023-02-02

最新評(píng)論