1. 程式人生 > >python機器學習之神經網路(二)

python機器學習之神經網路(二)

來自:http://blog.csdn.net/cui134/article/details/26823101

由於Rosenblatt感知器的侷限性,對於非線性分類的效果不理想。為了對線性分類無法區分的資料進行分類,需要構建多層感知器結構對資料進行分類,多層感知器結構如下:


該網路由輸入層,隱藏層,和輸出層構成,能表示種類繁多的非線性曲面,每一個隱藏層都有一個啟用函式,將該單元的輸入資料與權值相乘後得到的值(即誘導區域性域)經過啟用函式,啟用函式的輸出值作為該單元的輸出,啟用函式類似與硬限幅函式,但硬限幅函式在閾值處是不可導的,而啟用函式處處可導。本次程式中使用的啟用函式是tanh函式,公式如下:


tanh函式的影象如下:


程式中具體的tanh函式形式如下:


就是神經元j的誘導區域性域

它的區域性梯度分兩種情況:

(1)神經元j沒有位於隱藏層:


(2)神經元j位於隱藏層:


其中k是單元j後面相連的所有的單元。

區域性梯度得到之後,根據增量梯度下降法的權值更新法則

即可得到下一次的權值w,經過若干次迭代,設定誤差條件,即可找到權值空間的最小值。

python程式如下,為了能夠視覺化,訓練資料採用二維資料,每一個隱藏層有8個節點,設定了7個隱藏層,一個輸出層,輸出層有2個單元:

  1. import numpy as np  
  2. import random  
  3. import copy  
  4. import matplotlib.pyplot as plt  
  5. #x和d樣本初始化
  6. train_x = [[1,6],[3,12],[3,9],[3,21],[2,16],[3,15]]  
  7. d =[[1,0],[1,0],[0,1],[0,1],[1,0],[0,1]]  
  8. warray_txn=len(train_x[0])  
  9. warray_n=warray_txn*4
  10. #基本引數初始化
  11. oldmse=10**100
  12. fh=1
  13. maxtrycount=500
  14. mycount=0.0
  15. if maxtrycount>=20:  
  16.         r=maxtrycount/5
  17. else:  
  18.         r=maxtrycount/2
  19. #sigmoid函式
  20. ann_sigfun=None
  21. ann_delta_sigfun=None
  22. #總層數初始化,比非線性導數多一層線性層
  23. alllevel_count=warray_txn*4
  24. # 非線性層數初始化
  25. hidelevel_count=alllevel_count-1
  26. #學習率引數 
  27. learn_r0=0.002
  28. learn_r=learn_r0        
  29. #動量引數
  30. train_a0=learn_r0*1.2
  31. train_a=train_a0  
  32. expect_e=0.05
  33. #對輸入資料進行預處理
  34. ann_max=[]  
  35. for m_ani in xrange(0,warray_txn):             #找出訓練資料中每一項的最大值
  36.     temp_x=np.array(train_x)  
  37.     ann_max.append(np.max(temp_x[:,m_ani]))  
  38. ann_max=np.array(ann_max)  
  39. def getnowsx(mysx,in_w):  
  40.         '''''生成本次的擴維輸入資料  '''
  41.         '''''mysx==>輸入資料,in_w==>權值矩陣,每一列為一個神經元的權值向量'''
  42.         global warray_n  
  43.         mysx=np.array(mysx)  
  44.         x_end=[]     
  45.         for i in xrange(0,warray_n):  
  46.                 x_end.append(np.dot(mysx,in_w[:,i]))  
  47.         return x_end  
  48. def get_inlw(my_train_max,w_count,myin_x):  
  49.         '''''找出權值矩陣均值接近0,輸出結果方差接近1的權值矩陣'''
  50.         #對隨機生成的多個權值進行優化選擇,選擇最優的權值
  51.         global warray_txn  
  52.         global warray_n  
  53.         mylw=[]  
  54.         y_in=[]  
  55.         #生成測試權值
  56.         mylw=np.random.rand(w_count,warray_txn,warray_n)  
  57.         for ii in xrange (0,warray_txn):  
  58.             mylw[:,ii,:]=mylw[:,ii,:]*1/float(my_train_max[ii])-1/float(my_train_max[ii])*0.5
  59.         #計算輸出
  60.         for i in xrange(0,w_count):  
  61.                 y_in.append([])  
  62.                 for  xj in xrange(0,len(myin_x)):  
  63.                         y_in[i].append(getnowsx(myin_x[xj],mylw[i]))  
  64.         #計算均方差
  65.         mymin=10**5
  66.         mychoice=0
  67.         for i in xrange(0,w_count):  
  68.                 myvar=np.var(y_in[i])  
  69.                 if abs(myvar-1)<mymin:  
  70.                         mymin=abs(myvar-1)  
  71.                         mychoice=i  
  72.         #返回資料整理的權值矩陣
  73.         return mylw[mychoice]  
  74. mylnww=get_inlw(ann_max,300,train_x)  
  75. def get_inputx(mytrain_x,myin_w):  
  76.         '''''將訓練資料經過權值矩陣,形成擴維資料'''
  77.         end_trainx=[]  
  78.         for i in xrange(0,len(mytrain_x)):  
  79.                 end_trainx.append(getnowsx(mytrain_x[i],myin_w))          
  80.         return end_trainx  
  81. x=get_inputx(train_x,mylnww)#用於輸入的擴維資料
  82. #對測試資料進行擴維
  83. def get_siminx(sim_x):  
  84.         global mylnww  
  85.         myxx=np.array(sim_x)  
  86.         return get_inputx(myxx,mylnww)  
  87. #計算一層的初始化權值矩陣
  88. def getlevelw(myin_x,wo_n,wi_n,w_count):  
  89.         mylw=[]  
  90.         y_in=[]  
  91.         #生成測試權值
  92.         mylw=np.random.rand(w_count,wi_n,wo_n)  
  93.         mylw=mylw*2.-1
  94.         #計算輸出
  95.         for i in xrange(0,w_count):  
  96.                 y_in.append([])  
  97.                 for  xj 

    相關推薦

    python機器學習神經網路()

    來自:http://blog.csdn.net/cui134/article/details/26823101 由於Rosenblatt感知器的侷限性,對於非線性分類的效果不理想。為了對線性分類無法區分的資料進行分類,需要構建多層感知器結構對資料進行分類,多層感

    機器學習神經網路python實現

    神經網路在機器學習中有很大的應用,甚至涉及到方方面面。本文主要是簡單介紹一下神經網路的基本理論概念和推算。同時也會介紹一下神經網路在資料分類方面的應用。 首先,當我們建立一個迴歸和分類模型的時候,無論是用最小二乘法(OLS)還是最大似然值(MLE)都用來使得殘差達到最小。因此我們在建立模型的時候,都會有一個l

    系統學習機器學習神經網路(十) --人工神經網路總結

    本來這篇還缺個RBM,但RBM在DBN中使用,暫時放在深度學習那裡。這裡看到一篇非常好的總結,儲存下來。 轉自:http://blog.csdn.net/fengbingchun/article/details/50274471 本文主要對人工神經網路基礎進行了描述,主要包

    機器學習神經網路:離線安裝tensorflow

    Python學習中安裝方面是一個大坑,後面我會把所有的安裝過程都總結下來,這裡先推送一個tensorflow的安裝,大家不用慌,按照下面的過程一步一步來. 1、 準備工作 電腦安裝好anaconda,python(python,我是強烈推薦使用anaconda,

    系統學習機器學習神經網路(十一) --TDNN

    近來在瞭解卷積神經網路(CNN),後來查到CNN是受語音訊號處理中時延神經網路(TDNN)影響而發明的。本篇的大部分內容都來自關於TDNN原始文獻【1】的理解和整理。該文寫與1989年,在識別"B", "D", "G"三個濁音中得到98.5%的準確率,高於HMM的93.7%。是CNN的先驅。 &

    機器學習神經網路機器學習技法)

    神經網路的動機感知器的線性融合前面我們知道了將簡單的模型進行融合之後會得到一個非常強大的模型。我們試著將感知器(簡單的二元分類模型)做線性融合之後得到下圖:其中每一個節點都是一個感知器,其第一層的感知器都是由前一層X向量與W權重的線性組合,而第二層的感知器又是由前一層的得到的

    系統學習機器學習神經網路(四) --SOM

    轉自:http://blog.csdn.net/xbinworld/article/details/50818803,其實內容更多的是百度文庫裡叫《SOM自組織特徵對映神經網路》這篇文章上的,博主增加了一些理解。 本文詳細介紹一下自組織神經網路概念和原理,並重點介紹一下自組

    機器學習神經網路bp演算法推導

    這是一篇學習UFLDL反向傳導演算法的筆記,按自己的思路捋了一遍,有不對的地方請大家指點。 首先說明一下神經網路的符號: 1. nl 表示神經網路的層數。 2. sl 表示第 l 層神經元個數,不包含偏置單元。 3. z(l)i 表示第 l 層第 i 個

    機器學習神經網路):感知器的介紹和Python程式碼實現

    前言:本篇博文主要介紹感知器的相關知識,採用理論+程式碼實踐的方式,進行感知器的學習。本文首先介紹感知器的模型,然後介紹感知器學習規則(Perceptron學習演算法),最後通過Python程式碼實現單層感知器,從而給讀者一個更加直觀的認識。 1.單層感知器模型 單層感知器

    機器學習_3.神經網路CNN

    卷積神經網路 卷積神經網路(Convoltional Neural Networks, CNN)是一類包含卷積或相關計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一  

    機器學習_2.神經網路DBN

    深度信念網路(DBN) 深度信念網路是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察資料和標籤之間的聯合分佈,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|O

    深度學習(神經網路)單層感知器(python)(一)

    感知器介紹 感知器(Perceptron),是神經網路中的一個概念,在1950s由Frank Rosenblatt第一次引入。 單層感知器(Single Layer Perceptron)是最簡單的神經網路。它包含輸入層和輸出層,而輸入層和輸出層是直接相連的。

    機器學習神經網路(四):BP神經網路的介紹和Python程式碼實現

    前言:本篇博文主要介紹BP神經網路的相關知識,採用理論+程式碼實踐的方式,進行BP神經網路的學習。本文首先介紹BP神經網路的模型,然後介紹BP學習演算法,推導相關的數學公式,最後通過Python程式碼實現BP演算法,從而給讀者一個更加直觀的認識。 1.BP網路模型 為了將理

    python3__機器學習__神經網路基礎演算法__最小乘法(LS演算法)

    1.LS演算法說明 LS演算法是一種數學優化技術,也是一種機器學習常用演算法。他通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便的求得未知的資料(1),並使得這些求得的資料與實際資料之間誤差的平方和最小。除此之外最小二乘法還可用於曲線擬合(2),其他一些優化問題(

    簡單易學的機器學習演算法——神經網路BP神經網路

    %% BP的主函式 % 清空 clear all; clc; % 匯入資料 load data; %從1到2000間隨機排序 k=rand(1,2000); [m,n]=sort(k); %輸入輸出資料 input=data(:,2:25); output1 =data(:,1); %把輸出從1維變

    Udacity機器學習進階—監督學習神經網路迷你專案

    1.建立感知 def activate(self,inputs): """ Takes in @param inputs, a list of numbers equal to length of weights.

    100天搞定機器學習|Day35 深度學習神經網路的結構

    100天搞定機器學習|Day1資料預處理 100天搞定機器學習|Day2簡單線性迴歸分析 100天搞定機器學習|Day3多元線性迴歸 100天搞定機器學習|Day4-6 邏輯迴歸 100天搞定機器學習|Day7 K-NN 100天搞定機器學習|Day8 邏輯迴歸的數學原理 100天搞定機器學習|Day9-12

    Python 機器學習開發環境

    sta HR nta 命令行 make 語言 anaconda 使用總結 2.6 Python 數據分析庫 Python 編程語言 Pythong Tutorial: https://docs.python.org/3/tutorial/ NumPy 提供常用的數值數組、矩

    Python機器學習梯度提升樹

    pri () 糾正 ensemble depth del gbrt 1.5 cer #和隨機森林一樣,基於決策樹,采用連續的方式構建樹,深度很小max_depth<5.重要的參數n_estimate和learning_rate,這兩個參數的y作用在於對模型過擬合化得調

    人工智慧、機器學習神經網路計算棒走出試驗室的應用場景

    跟著“人工智慧”走出試驗室、逐步有了實踐的應用場景,它成為了一項可能在不久的將來徹底改動人類社會的根底技能,也成為了很多人最愛評論的論題。可是,AI(人工智慧)、機器學習、神經網路計算棒,這些詞看著潮,究竟是指什麼呢? 別慌,咱們試著舉幾個簡略的比方來解釋一下。 人工智慧 “科技