1. 程式人生 > >BP神經網路的Matlab實現——人工智慧演算法

BP神經網路的Matlab實現——人工智慧演算法

這幾天在各大媒體上接觸到了人工智慧機器學習,覺得很有意思,於是開始入門最簡單的機器演算法——神經網路訓練演算法(Neural Network Training);以前一直覺得機器學習很高深,到處是超高等數學、線性代數、數理統計。入坑發現確實是這樣!但是呢由專案例項驅動的學習比起為考試不掛科為目的的學習更為高效、實用!在遺傳演算法、神經網路演算法的學習入門之後覺得數學只要用心看沒問題的(即使是蒙特卡洛和馬爾科夫問題),但是呢需要把數學統計應用到程式中,來解決實際的問題這是兩碼事。主要呢還是需要動手打程式碼。下面呢是今天的機器學習之神經網路學習入門記錄篇,希望幫助到同樣入門採坑的哥們,一起進步!

一、主題閒扯

神經網路學習-顧名思義,就是類似我們人類的學習方式,通過模擬神經元的活動,在神經系統中進行資訊處理、儲存記憶和反饋的生物機理功能。其實這樣是機器學習演算法的共性吧,所有的智慧演算法都是善於發現生活中的常見情節推廣到計算模擬的範疇,例如:遺傳演算法、煙花演算法、蟻群演算法、模擬退火演算法等等。
神經網路學習是人工智慧領域的基本演算法之一,它是在1943年被心理學家McCulloch和數學家Pitts合作提出的數學模型。並在之後不斷完善發展到今天的。它的主要應用領域涉及到模式識別、智慧機器人、非線性系統識別、知識處理等。

二、演算法理論

2.1、人工神經元模型
神經元模型

這裡我們先解釋一下機器學習的一些特性,總體來說呢,機器學習的核心就是學習。這個學習過程呢就是通過已知來訓練機器。比如:我們通過大量的青蛙影象資料樣本來進行輸入訓練演算法,使得我們給這個程式演算法一張新的青蛙影象,它能利用訓練資料的學習來判斷我們新給它的影象資料是青蛙。所以呢,機器學習演算法來說就是通過輸入變數到演算法,演算法通過分析反饋進行判斷,最後做出結果。
在上圖中是簡化的神經元模型,我們的Xi是一系列的輸入變數

,對應在其箭頭方向上的是一個權重係數。權重係數呢是為了消除樣本資料的偏差,通常是一個rand函式在0-1之間的取值。通過輸入變數Xi和其自己的權重係數Wi的乘積的求和輸入到神經元上。此時神經元得到了輸入變數和其權重的乘積累加和。通過對映函式F(x)來進行對映得到結果。以上就是一個簡單的神經元模型和資訊傳遞過程。
這裡寫圖片描述

也可以簡化成下面的數學推導公式:我們可以把輸入變數和對應權重變換成矩陣相乘,這在Matlab中的運算時是十分有利的。
這裡寫圖片描述

對於以上的輸入變數和對應權重值我們很容易處理,但是這個模型的核心是基於啟用函式F(x)的,下面是我們常見的一些啟用函式:
啟用函式

2.2、神經網路模型
我們的神經網路是由若干的神經元連線而成的,我們常見的模型分類為:
1、連線方式:前向神經網路和遞迴神經網路*(反饋神經網路)
2、訓練方式:監督式學習和非監督式學習
3、按照實現功能:擬合(迴歸)神經網路 vs. 分類神經網路

2.3、BP(反向傳遞)神經網路概述:
概述、
1、Backpropagation is a common method of teaching artificial neural networks how to
perform a given task.
2、It is a supervised learning method, and is a generalization of the delta rule. It
requires a teacher that knows, or can calculate, the desired output for any input in
the training set.
3、 Backpropagation requires that the activation function used by the artificial neurons
(or “nodes”) be differentiable

演算法學習過程
Phase 1:神經傳遞
1. 通過神經網路進行訓練模式輸入的向前傳播以產生傳播的輸出啟用。
2. 訓練模式中通過神經網路對傳播的輸出啟用進行反向傳播,目標是生成所有輸出和隱藏神經元的增量以便進行反饋調整。
Phase 2: 權值更新
1. 用它的輸出增量和輸入啟用變數來得到權重的梯度。
2. 通過從權重中減去它的比例來使權重朝著相反的梯度方向移動(最小梯度法)。

演算法遞進過程圖解:(Source:)
該專案描述了利用反向傳播演算法實現多層神經網路的教學過程。為了說明這一過程,有兩個輸入和一個輸出的三層神經網路,如下圖所示:
這裡寫圖片描述

1、每個神經元由兩個單位組成。第一個單元新增權重係數和輸入訊號,第二個單元實現非線性功能,稱為神經元啟用功能。訊號e是加法器輸出訊號,y=f(e)是非線性元件的輸出訊號。訊號y也是神經元的輸出訊號。如下圖:
這裡寫圖片描述

2、為了訓練神經網路,我們需要訓練資料集。訓練資料集由輸入訊號(x1和x2)組成,並分配相應的目標(期望輸出)z。網路訓練是一個迭代的過程。在每個迭代中權重係數的節點使用新的訓練資料集的資料被修改。修改計算使用下面描述的演算法:每個教學步驟開始迫使這兩個輸入訊號從訓練集,在這個階段我們可以確定每個網路層中的每個神經元的輸出訊號值。下面的圖片說明了訊號是如何傳播的。
這裡寫圖片描述
同理如下:
這裡寫圖片描述

這裡寫圖片描述

3、通過隱藏層傳播訊號。符號wmn表示下一層神經元的輸出和神經元n的輸入之間的連線。
這裡寫圖片描述

這裡寫圖片描述

4、通過輸出層傳播訊號
這裡寫圖片描述

5、在接下來的演算法步驟中,將網路y的輸出訊號與期望的輸出值(目標)進行比較,在訓練資料集中找到了輸出訊號。這種差異被稱為輸出層神經元的錯誤訊號d。
這裡寫圖片描述

6、直接計算內部神經元的錯誤訊號是不可能的,因為這些神經元的輸出值是未知的。多年來,多人網路訓練的有效方法一直是未知的。只有在80年代中期,反向傳播演算法才被設計出來。這個想法是將錯誤訊號d(在單個教學步驟中計算)返回給所有神經元,輸出訊號是被討論神經元的輸入訊號。
這裡寫圖片描述

這裡寫圖片描述

7、用於傳播錯誤的權重係數,等於在計算輸出值時使用的係數。只有資料流的方向被改變(訊號從一個輸出到另一個輸入)。該技術適用於所有網路層。如果傳播錯誤來自少數神經元,它們就會被新增。下面的例子是:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

8、當計算每個神經元的錯誤訊號時,可以修改每個神經元輸入節點的權重係數。在下面的公式中,df(e)/de代表了神經元啟用功能的導數(權重被修改)。
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

8、係數h(羅馬字元學習因子)影響網路訓練速度。有一些技術可以選擇這個引數。第一種方法是用引數的大值開始教學過程。當權重係數被確定時,引數正逐漸減少。第二種,更復雜的方法,開始以小的引數值教學。在教學過程中,在教學過程中,在教學過程中增加了引數,在最後階段又減少了。以較低的引數值啟動教學過程,可以確定權重係數的符號。

插入重點:有導師學習的神經網路狀態:

有導師學習狀態簡而言之就是對輸入的訓練集,可以根據網路中的實際輸出與期望輸出之間的誤差來反向調整個連線權值的學習方法。其主要步驟如下:

  1. 從樣本資料中隨機性的選取一個樣本資料{Ai,Bi},其中Ai是輸出,Bi是期望輸出
  2. 通過訓練得出實際輸出Oi
  3. 求誤差D = Bi - Oi
  4. 根據步驟3得到的誤差D,來調整各隱含層之間連線權值
  5. 對,每個樣本重複用以上步驟,直到對整體樣本資料來說,誤差收斂到控制範圍內為止。

有導師學習演算法:Delta學習規則
Delta是一種簡單的經典有導師演算法規則。根據實際輸出與期望輸出的差別;來調整連線權。其數學表達:
這裡寫圖片描述

在上述公式中,Wij表示的是神經元 i 到 j之間的連線權di是神經元i的期望輸出Yi是神經元 i 的實際輸出**。Xj是神經元的狀態。,如果是啟用狀態則為**1,否則為0或者-1
通過神經元j的實際輸出與期望值比較取值,我們可以知道Delta的本質,就是如果實際輸出大於期望輸出(di - yi)為負數,就是減小所有輸入為正的連線權值。增大輸入為負的權值。反之,如果實際輸出小與期望輸出。則增大輸入為正的連線權值,減小輸入為負的連線權值。

2.4、資料歸一化
什麼是歸一化?
將資料對映到[0, 1]或[-1, 1]區間或其他的區間。

為什麼要歸一化?
1. 輸入資料的單位不一樣,有些資料的範圍可能特別大,導致的結果是神經網路收斂慢、訓練時間長。
2. 資料範圍大的輸入在模式分類中的作用可能會偏大,而資料範圍小的輸入作用就可能會偏小。
3. 由於神經網路輸出層的啟用函式的值域是有限制的,因此需要將網路訓練的目標資料對映到啟用函式的值域。例如神經網路的輸出層若採用S形啟用函式,由於S形函式的值域限制在(0,1),也就是說神經網路的輸出只能限制在(0,1),所以訓練資料的輸出就要歸一化到[0,1]區間。
4. S形啟用函式在(0,1)區間以外區域很平緩,區分度太小。例如S形函式f(X)在引數a=1時,f(100)與f(5)只相差0.0067

歸一化演算法
1、這裡寫圖片描述
其中min為x的最小值,max為x的最大值,輸入向量為x,歸一化後的輸出向量為y。上式將資料歸一化得到[0,1]區間,當啟用函式採用S形函式時(值域為(0,1))時這條公式適用。
2、這裡寫圖片描述
這條公式將資料歸一化到[-1, 1]區間。當啟用函式採用雙極S形函式(值域為(-1,1))時,該公式適用。

歸一化演算法重點知識函式:
幾個要說明的函式介面:

[Y,PS] = mapminmax(X)
[Y,PS] = mapminmax(X,FP)
Y = mapminmax('apply',X,PS)
X = mapminmax('reverse',Y,PS)

用例項來講解,測試資料 x1 = [1 2 4], x2 = [5 2 3];

>> [y,ps] = mapminmax(x1)
y =
   -1.0000   -0.3333    1.0000

ps = 
      name: 'mapminmax'
     xrows: 1
      xmax: 4
      xmin: 1
    xrange: 3
     yrows: 1
      ymax: 1
      ymin: -1
    yrange: 2

其中y是對進行某種規範化後得到的資料,這種規範化的對映記錄在結構體ps中.讓我們來看一下這個規範化的對映到底是怎樣的?

y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;
[關於此演算法的一個問題.演算法的假設是每一行的元素都不想相同,那如果都相同怎麼辦?實現的辦法是,如果有一行的元素都相同比如xt = [1 1 1],此時xmax = xmin = 1,把此時的變換變為y = ymin,matlab內部就是這麼解決的.否則該除以0了,沒有意義!]

也就是說對x1 = [1 2 4]採用這個對映 f: 2*(x-xmin)/(xmax-xmin)+(-1),就可以得到y = [ -1.0000 -0.3333 1.0000]
我們來看一下是不是: 對於x1而言 xmin = 1,xmax = 4;
則y(1) = 2*(1 - 1)/(4-1)+(-1) = -1;
y(2) = 2*(2 - 1)/(4-1)+(-1) = -1/3 = -0.3333;
y(3) = 2*(4-1)/(4-1)+(-1) = 1;

看來的確就是這個對映來實現的.
對於上面algorithm中的對映函式 其中ymin,和ymax是引數,可以自己設定,預設為-1,1;

比如:

>>[y,ps] = mapminmax(x1);
>> ps.ymin = 0;
>> [y,ps] = mapminmax(x1,ps)
y =
         0    0.3333    1.0000

ps = 
      name: 'mapminmax'
     xrows: 1
      xmax: 4
      xmin: 1
    xrange: 3
     yrows: 1
      ymax: 1
      ymin: 0
    yrange: 1

則此時的對映函式為: f: 1*(x-xmin)/(xmax-xmin)+(0)

如果我對x1 = [1 2 4]採用了某種規範化的方式, 現在我要對x2 = [5 2 3]採用同樣的規範化方式[同樣的對映],如下可辦到:

>> [y1,ps] = mapminmax(x1);
>> y2 = mapminmax('apply',x2,ps)
y2 =
    1.6667   -0.3333    0.3333

即對x1採用的規範化對映為: f: 2*(x-1)/(4-1)+(-1),(記錄在ps中),對x2也要採取這個對映.
x2 = [5,2,3],用這個對映我們來算一下.

y2(1) = 2(5-1)/(4-1)+(-1) = 5/3 = 1+2/3 = 1.66667
y2(2) = 2(2-1)/(4-1)+(-1) = -1/3 = -0.3333
y2(3) = 2(3-1)/(4-1)+(-1) = 1/3 = 0.3333

X = mapminmax(‘reverse’,Y,PS)的作用就是進行反歸一化,講歸一化的資料反歸一化再得到原來的資料:

>> [y1,ps] = mapminmax(x1);
>> xt = mapminmax('reverse',y1,ps)
xt =
     1     2     4

此時又得到了原來的x1(xt = x1);

**

三、神經網路引數定義以及對BP神經網路效能的影響

**
常見的訓練函式:
訓練方法 訓練函式
梯度下降法 traingd
有動量的梯度下降法 traingdm
自適應lr梯度下降法 traingda
自適應lr動量梯度下降法 traingdx
彈性梯度下降法 trainrp
Fletcher-Reeves共軛梯度法 traincgf
Ploak-Ribiere共軛梯度法 traincgp
Powell-Beale共軛梯度法 traincgb
量化共軛梯度法 trainscg
擬牛頓演算法 trainbfg
一步正割演算法 trainoss
Levenberg-Marquardt trainlm

神經網路學習的引數:
訓練引數 引數介紹
net.trainParam.epochs 最大訓練次數(預設為10)
net.trainParam.goal 訓練要求精度(預設為0)
net.trainParam.lr 學習率(預設為0.01)
net.trainParam.max_fail 最大失敗次數(預設為5)
net.trainParam.min_grad 最小梯度要求(預設為1e-10)
net.trainParam.show 顯示訓練迭代過程(NaN表示不顯示,預設為25)
net.trainParam.time 最大訓練時間(預設為inf)
net.trainParam.mc 動量因子(預設0.9)
net.trainParam.lr_inc 學習率lr增長比(預設為1.05)
net.trainParam.lr_dec 學習率lr下降比(預設為0.7)
net.trainParam.max_perf_inc 表現函式增加最大比(預設為1.04)
net.trainParam.delt_inc 權值變化增加量(預設為1.2)
net.trainParam.delt_dec 權值變化減小量(預設為0.5)
net.trainParam.delt0 初始權值變化(預設為0.07)
net.trainParam.deltamax 權值變化最大值(預設為50.0)
net.trainParam.searchFcn 一維線性搜尋方法(預設為srchcha)
net.trainParam.sigma 因為二次求導對權值調整的影響引數(預設值5.0e-5)
net.trainParam.lambda Hessian矩陣不確定性調節引數(預設為5.0e-7)
net.trainParam.men_reduc 控制計算機記憶體/速度的參量,記憶體較大設為1,否則設為2(預設為1)
net.trainParam.mu u的初始值(預設為0.001)
net.trainParam.mu_dec u的減小率(預設為0.1)
net.trainParam.mu_inc u的增長率(預設為10)
net.trainParam.mu_max u的最大值(預設為1e10)

神經網路學習主要函式說明
newff:前饋網路建立函式
語法:
net = newff(A,B,{C},’trainFun’,’BLF’,’PF’)。
A:一個n*2的矩陣,第i行元素為輸入訊號Xi的最大最小值
B:一個K維行向量,其元素為網路中各個節點的數量。
C:一個K維字串行向量,每一個分量為對應層的神經元的啟用函式,預設為“tansig”
trainFun:為學習規則的採用的訓練演算法。預設為:“trainlm”
BLF:BP權值/偏差學習函式。預設為:“learngdm”
PF:效能函式,預設為“mse”

train函式
語法:
即網路學習函式:
[net,tr,YI,E] = train(net,X,Y)
X:網路實際輸入
Y:網路應有輸出
tr:網路跟蹤資訊
YI:網路實際輸出
E:誤差矩陣

sim函式
**語法:**Y = sim(net,X)
X:輸入給網路的K*N矩陣,K為網路輸入個數,N為樣本資料量
Y:輸出矩陣Q*N,其中Q為網路輸出個數

四、例項解讀:

利用三層BP神經網路來完成非線性函式的逼近任務,其中隱層神經元個數為五個。
樣本資料:
這裡寫圖片描述

程式碼如下:

clear;
clc;
X=-1:0.1:1;
D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...
    0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988...
    0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201];
figure;
plot(X,D,'*'); %繪製原始資料分佈圖
net = newff([-1 1],[5 1],{'tansig','tansig'});
net.trainParam.epochs = 100; %訓練的最大次數
net.trainParam.goal = 0.005; %全域性最小誤差
net = train(net,X,D); 
O = sim(net,X); 
figure; 
plot(X,D,'*',X,O); %繪製訓練後得到的結果和誤差曲線
V = net.iw{1,1}%輸入層到中間層權值
theta1 = net.b{1}%中間層各神經元閾值
W = net.lw{2,1}%中間層到輸出層權值
theta2 = net.b{2}%輸出層各神經元閾值

最後得到結果:
這裡寫圖片描述

**

五、學習總結

**
通過神經網路的學習入門,發現機器學習的共性和樂趣;由淺入深、循序漸進。雖然看起來很是晦澀難懂。但是一門心思鑽進去,最後做出例項是一種巨大的喜悅和自豪。從中得到知識的喜悅和探索規律的滿足。
總結神經網路:
1、匯入需要處理的資料。
2、對資料進行打亂,隨機獲取實驗資料和目標資料。(其中包括歸一化:mapminmax)
3、構建一個訓練網路:newwff
4、對構建的網路進行訓練:train
5、進行資料模擬操作sin(net,x)
6、驗證和後評價
7、繪圖直觀的顯示資料模擬訓練的效果。
在上面的神經網路訓練中,我們要清楚構建神經網路的實驗資料和目標收斂資料都是從原始資料中隨機獲取的。

                             **By:wangyun 2018-01-28 11:01:57**

相關推薦

BP神經網路Matlab實現——人工智慧演算法

這幾天在各大媒體上接觸到了人工智慧機器學習,覺得很有意思,於是開始入門最簡單的機器演算法——神經網路訓練演算法(Neural Network Training);以前一直覺得機器學習很高深,到處是超高等數學、線性代數、數理統計。入坑發現確實是這樣!但是呢由專案例

MATLAB神經網路程式設計(七)——BP神經網路實現

《MATLAB神經網路程式設計》 化學工業出版社 讀書筆記 第四章 前向型神經網路 4.3 BP傳播網路 本文是《MATLAB神經網路程式設計》書籍的閱讀筆記,其中涉及的原始碼、公式、原理都來自此書,若有不理解之處請參閱原書 本文講述BP網路常

BP神經網路java實現,按照演算法步驟也參考網上相關資源寫的,若君有高見,非常歡迎指教

for(int i=0;i<hidN;i++){for(int j=0;j<=inN;j++){wyh[i][j]=Math.random()-0.5;//初始化權值和閾值//System.out.println(wyh[i][j]);}}//System.out.println();wyo=ne

單隱層BP神經網路C++實現

    這幾天抽時間學習了一下很久之前就想學習的BP神經網路。通過閱讀西瓜書的神經網路部分的原理和參考了網上幾篇部落格,我自己用C++編寫、實現了一個單隱層BP神經網路。     簡單畫了個示意圖,好理解下面給出的公式:(注意:圖中省略了其他的節點之間的連

BP神經網路 MATLAB源程式

和以前的習慣一樣,只舉典例,然後給程式和執行結果進行說明。 問題背景是: 給定某地區20年的資料,6列,21行,第一列值為年份,第二列為人數,第三列為機動車數量,第四列為公路面積,第五列為公路客運量,第六列為公路貨運量,這20年是1990年到2009年,現在給我們2010和2011年,第二、

一個簡單的BP神經網路matlab程式(附函式詳解)

說明:20180604更新2、本人對其中涉及到的函式進行了詳細說明。3、此程式中部分函式的使用方式是高版本Matlab中不推薦的文中給出了當前高版本Matlab中的使用方式,並給出了相關部落格地址,具體如下:4、使用過程中,可能出現的問題5、所需的IRIS資料集具體程式如下:

Bp神經網路+C++實現

0 前言   神經網路在我印象中一直比較神祕,正好最近學習了神經網路,特別是對Bp神經網路有了比較深入的瞭解,因此,總結以下心得,希望對後來者有所幫助。   神經網路在機器學習中應用比較廣泛,比如函式逼近,模式識別,分類,資料壓縮,資料探勘等領域。神經

最簡單的三層神經網路Matlab實現

W = randn(n,H); % weight for hidden layer, W(:,i) is the weight vector for unit i b = randn(H,1); % bias for hidden layer wo = randn(H,1); %weight for out

Java實現BP神經網路實現對空氣質量的分析和評級

使用java實現BP神經網路進行迴歸分析,並利用訓練好的神經網路實現空氣質量的評級。 本實驗的工程專案和訓練資料集可訪問以下網址下載: 實驗描述: 對指定資料集進行迴歸分析,選擇適當的迴歸演算法,編寫程式實現,提交程式和結果報告。 資料集: AirQualityU

BP神經網路實現

一 BP神經網路的基本結構 在神經網路中,輸入層由資料集的某個向量x和一個偏置b構成,該向量需要乘以同緯度的權重向量w,累加得到下一層神經元的一個輸入標量,該標量乘以啟用函式得到下一層神經元的輸入。 該結構分為以下幾個部分。 二 BP神

BP神經網路 c++實現

#include <iostream> #include <cmath> #include "stdio.h" #include "stdlib.h" #include "time.h" using namespace std;

BP神經網路的各種優化演算法

loss一直在波動,沒有收斂的趨勢,以為自己訓練有問題, 後來看了SGD的介紹,再瞭解這屬於正常的,具體看下面介紹吧。 ==========================================================================

BP神經網路Python實現異或問題

# -*- coding: UTF-8 -*- import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #BP神經網路實現異或問題 X=np.array([[1,0,0]

BP神經網路演算法matlab具體實現

之前的幾篇部落格的一個共同點就是梯度下降法,梯度下降法是用來求解無約束最優化問題的一個數值方法,簡單實用,幾乎是大部分演算法的基礎,下面來利用梯度下降法優化BP神經網路。 [TOC] 梯度公式 下面的BP神經網路結構為最簡單的三層網路,各層的神經元數量

粒子群優化演算法BP神經網路優化 Matlab實現

1、粒子群優化演算法 粒子群演算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,該演算法模擬鳥叢集飛行覓食的行為,鳥之間通過集體的協作使群體達到最優目的,是一種基於 Swarm Inteligence的優化方法。同遺傳演算法類似,也是一種

機器學習之BP神經網路演算法實現影象分類

BP 演算法是一個迭代演算法,它的基本思想為:(1) 先計算每一層的狀態和啟用值,直到最後一層(即訊號是前向傳播的);(2) 計算每一層的誤差,誤差的計算過程是從最後一層向前推進的(這就是反向傳播演算法名字的由來);(3) 更新引數(目標是誤差變小),迭代前面兩

[純C#實現]基於BP神經網路的中文手寫識別演算法

效果展示 這不是OCR,有些人可能會覺得這東西會和OCR一樣,直接進行整個字的識別就行,然而並不是. OCR是2維畫素矩陣的畫素資料.而手寫識別不一樣,手寫可以把使用者寫字的筆畫時間順序,抽象成一個維度.這樣識別的就是3維的資料了.識別起來簡單很多. 最近需要做一箇中文手寫識別演算法.搜尋了網上的

BP神經網路MATLAB實現案例一

眾做周知,BP神經網路是最常用的一種神經網路。 本文主要講解%實現對玫瑰的識別%案例。 關於神經網路的介紹與BP的詳解,論壇裡鋪天蓋地,不在此贅述。 一.BP簡述 簡要概括一下: 一

BP神經網路學習及matlab實現

什麼是神經網路? 神經網路是由很多神經元組成的,首先我們看一下,什麼是神經元 上面這個圖表示的就是一個神經元,我們不管其它書上說的那些什麼樹突,軸突的。我用個比較粗淺的解釋,可能不太全面科學,但對初學者很容易理解: 1、我們把輸入訊號看成你在matlab中需要輸入的資料,

BP神經網路原理與matlab實現

個人部落格文章連結: http://www.huqj.top/article?id=166 BP神經網路,即“反向傳播”神經網路,是一種被廣泛運用的人工神經網路,它的思想就是通過反向傳播不斷調整模型權重,最終使得模型輸出與預期輸出的誤差控制在一個小範圍內。其中反向傳播的演算法(BP演算