1. 程式人生 > >菜鳥學matlab之智慧演算法(2)——————————BP神經網路演算法

菜鳥學matlab之智慧演算法(2)——————————BP神經網路演算法

一.演算法背景和理論

BP(Back Propagation)神經網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hidden layer)和輸出層(output layer)。

二.演算法的詳細分析

這裡寫圖片描述
圖2.1BP神經元的簡略圖

關於圖的分析(五種元素):
      1)輸入訊號(也就是我們的輸入向量)
      2)連線權(通常也用向量來表示):連線強度由各自連線上的權值表示(正負都可以),其中正表示啟用,負表示抑制。
      3)加法器:用來求所有輸入訊號及其對應的權值積的和。
      4)啟用函式:用來抑制輸出訊號的振幅(這個下文會有詳解),啟用函式也可以被稱為抑制函式,因為它將輸出訊號限制在允許範圍的一個定值。通常,一個輸出訊號的正常幅度範圍可 寫成單位閉區間的[0,1],或者另一種區間[-1,1]。
      5)偏置闕值(可要可不要):在BP神經網路中,閾值也是一個變化值。根據其為正或者為負,相應的增加或者減少啟用函式的網格輸入。具體可以用下面的公式表示(其中bk表示自行設定的闕值大小):
     ![這裡寫圖片描述](https://img-blog.csdn.net/20150907001635630) 

  通過訓練網路(下面會詳解),對權重和閾值進行修正,最終達到區域性最優。
—————————————————————————————
三.BP神經網路中各個元素的詳解及擴充套件
1)啟用函式的種類
啟用函式的選擇是構建神經網路過程中的重要環節,下面簡要介紹常用的啟用函式。
(1) 線性函式 ( Liner Function )
這裡寫圖片描述
該函式在變數位於(-1,1)之間時放大的係數是一致的。
(2) 斜面函式 ( Ramp Function )

(3) 域值函式 ( Threshold Function )
這裡寫圖片描述

當輸入變數大於等於0時,輸出函式值為1,當小於0時,輸出為0.

以上3個啟用函式都屬於線性函式,下面介紹兩個常用的非線性啟用函式(最常用)。
說明:所有的非線性都為實數域R到[0,1]閉集的非連線函式,代表了狀態連續型神經元模型。最常用的的非線性轉移函式是單極性的Sigmoid函式曲線,簡稱S型函式,其特點是函式本身及其導數都是連續的,能夠體現數學計算上的優越性,因而在處理上十分方便。具體定義如下
(4)S形函式 ( Sigmoid Function )
這裡寫圖片描述

 影象:這裡寫圖片描述

(5) 雙極S形函式 (取值範圍[-1,1])
這裡寫圖片描述

四.具體的神經網路模型

分類標準:將一個神經元的輸出送到另一個神經元作為輸入訊號稱之為連線,每個連線通路對應一個連線權係數,相同神經元經過不同的連線方式將得到不同特性的神經網路(一般可分為分層網路和相互連線型網路)

1.分層網路

定義:將模型中的所有神經元按照功能分成若干層。一般有輸入層.隱含層(中間型)和輸出層,各層次相互連線。

輸入層連線外部輸入模式,並由各輸入單元傳送給項鍊的隱含層各單元;隱含層是模型的內部處理(這個也是理解了很久,並和最終輸出訊號的精度有關。)單元層,神經網路所具有的模式變換能力,如模式完善.特徵抽取等,主要體現在隱含層單元的處理,根據模式變換功能的不同,隱含層可以有多層,也可以一層都沒有;輸出才能產生神經網路的輸出模式。

分層網路可以細分為三種(根據內部的互聯方式)
1)單純的前向行網路(見圖a)

這裡寫圖片描述

結構分析:輸入模式有輸入才能進入網路,經過中間各層順序(一直向前無反饋)模式,由輸出層產生一個輸出模式,並完成一次網路狀態的更新。

2)具有反饋的前向型網路(見圖b)

這裡寫圖片描述

結構分析:反饋結構形式的封閉環路,具有反饋的單元也成為隱單元,其輸出成為內部輸出,而網路本身還是前向型的。

3)層內互聯的前向型網路(見圖C)

這裡寫圖片描述

結構分析:同一層內單元的相互連線使它們彼此之間制約。限制同一層內能同時啟用的單元個數,從外部看來還是前向型網路。一些自組織競爭網路就採用這種拓撲結構。

2.互相連線型網路(見圖d)

定義:網路中任一兩個單元之間都可達到,即存在連線路徑。網際網路絡又分為區域性互聯和全互聯。全互聯中的每個神經元的輸出都與其他神經元項鍊,而區域性網際網路絡中,有些神經元直接沒有連線關係。
這裡寫圖片描述

異同比較:對於簡單的前向型網路,給定某一輸入模式,網路能迅速產生一個相應的輸出模式,由某一網路引數出發,在一定時間內處於不但改變輸出模式的動態變化中,網路最終肯呢個產生某一穩定的輸出模式,但也可能進入週期性震盪或混沌狀態。

2.神經網路的學習方式
怎麼理解學習呢,神經網路需要提前給定樣本(包括輸入訊號和輸出訊號),學習也可以稱之為“訓練”,指的是神經網路在外部環境的刺激下調整引數,使整個模型以一種全新的方式對外部環境做出反應的一個過程。
根據學習環境不同,神經網路的學習方式可分為監督學習和非監督學習。

1)監督學習:將訓練樣本的資料加到網路輸入端,同時將相應的期望輸出和網格輸出相比較,得到誤差訊號,以此來控制權值連線強度的調整,經多次訓練後收斂到一個確定的權值當樣本情況發生變化時,經學習可以修改權值以適應新的環境。
—————————————————————————————

總結:整個演算法流程圖

這裡寫圖片描述

五.matlab程式碼案例

1)`

 p=-1:0.1:1;%表示輸入訊號
T=[-0.96 -0.577 -0.0729 0.377 0.641 0.66 0.461 0.1336 -0.201 -0.434 -0.5 -0.393 -0.1647 0.0988 0.3072 0.396 0.3449 0.1816 -0.0312 -0.2183 -0.3201];%表示輸出訊號,當做訓練的樣本,需要特別注意的是輸出樣本的維數必須要和輸入相同
 net =newff([-1,1],[5,1],{'tansig','purelin'});%[-1,1]表示輸入訊號的範圍(輸入訊號通常會在之前做歸一化處理,下面的例子會有細講),[5,1]表示隱含層有五個神經元,輸出層有一個神經元。'tansig'表示隱含層的傳遞函式為transig(單極性非線性函式),輸出層的傳遞函式為purelin。
 net.trainParam.epochs=200;%最大的訓練次數
 net.trainParam.goal=0;%訓練目標,也就是誤差精度
 net.trainParam.show=50;%兩次顯示之間的訓練次數
 net=train(net,p,T);%train為網路訓練函式,建立最初的訓練網路
Y=sim(net,p);%sim為神經網路預測函式,將訓練好的函式模擬輸出
 plot(p,T,'-',p,Y,'o');`

得出的函式影象如下所示:
這裡寫圖片描述

注:以上程式碼來自《數學建模與數學實驗》第四版

2)

%以下布步驟為通過前1000組資料來建立BP神經網路
 inputs = xlsread("相對地址");%表示輸入訊號
targets = xlsread("相對地址");;%表示輸出訊號,當做訓練的樣本
 hiddenLayerSize = 9;%隱含節點的個數
net = patternnet(hiddenLayerSize);%用patternnet()函式,patternnet()函式的引數有 (hiddenSizes,trainFcn,performFcn)三個。hiddenSizes預設值是10,可以用陣列表示多個隱含層。trainFcn預設值是 'trainscg'表示單極性方程, Performance function預設值是 'crossentropy'。如果想要有兩個隱含層,每層的神經元都是10個,則可以寫成  net = patternnet([10,10]);
 % 對資料進行預處理,這裡使用了歸一化函式(一般不用修改)
 %資料的歸一化處理是指將資料統一規劃在[0,1]之間,具體公式為
% y = (ymax - ymin)*(x - xmin)/(xmax - xmin) + ymin,可以用mapmaxmin()函式來進行處理
% For a list of all processing functions type: help nnprocess
net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};
net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'};
 % 把訓練資料分成三部分,訓練網路、驗證網路、測試網路

net.divideFcn = 'dividerand';  % Divide data randomly
net.divideMode = 'sample';  % Divide up every sample
net.divideParam.trainRatio =700/1000;%假設有1000條資料,前700條當做訓練樣本,驗證網路和測試網路分別選擇150條
net.divideParam.valRatio = 150/1000;
net.divideParam.testRatio = 150/1000;
 % 訓練函式
% For a list of all training functions type: help nntrain
net.trainFcn = 'trainlm';  % Levenberg-Marquardt

% 使用均方誤差來評估網路
% For a list of all performance functions type: help nnperformance
net.performFcn = 'mse';  % mse表示均方誤差函式
% 畫圖函式
% For a list of all plot functions type: help nnplot
net.plotFcns = {'plotperform','plottrainstate','ploterrhist', ...
  'plotregression', 'plotfit'};
% 開始訓練網路(包含了訓練和驗證的過程)
[net,tr] = train(net,inputs,targets);
% 測試網路
outputs = net(inputs);
errors = gsubtract(targets,outputs);
performance = perform(net,targets,outputs)
% 獲得訓練、驗證和測試的結果
trainTargets = targets .* tr.trainMask{1};
valTargets = targets  .* tr.valMask{1};
testTargets = targets  .* tr.testMask{1};
trainPerformance = perform(net,trainTargets,outputs)
valPerformance = perform(net,valTargets,outputs)
testPerformance = perform(net,testTargets,outputs)

% 可以檢視網路的各個引數
view(net)

% 根據畫圖的結果,決定是否滿意
% Uncomment these lines to enable various plots.
figure, plotperform(tr)
figure, plottrainstate(tr)
figure, plotconfusion(targets,outputs)
figure, ploterrhist(errors)
 save('training_net.mat','net','tr');
 load 'training_net.mat'
new_input = ex;
 new_output = round(net(ex'));
 new_input = ex;
 new_output = round(net(ex'));
new_output=new_ouput'

相關推薦

matlab智慧演算法2——————————BP神經網路演算法

一.演算法背景和理論 BP(Back Propagation)神經網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出

學習lucene搜尋流程

全文檢索的流程         索引流程和搜尋流程         索引流程:採集資料-->文件處理-->儲存到索引庫中   &nbs

前端node.js初體驗

如今,nodejs如此之火,讓我這個打算從事前端開發的小白,也忍不住要學習一下,然而剛剛接觸nodejs,就深深的喜歡上了這個語言。 下面我將分享一下我最初學習nodejs時的總結的學習經驗,也是總結一下近期學習的知識,還會總結我在學習中遇到的困難,又是如何解

Java——Java反射機制

上一篇博文《菜鳥學Java(九)——Java反射機制(一)》裡面,向大家介紹了什麼是Java的反射機制,以及Java的反射機制有什麼用。上一篇比較偏重理論,理論的東西給人講出來總感覺虛無縹緲,還是結合一些例項比較形象具體。那麼今天就結合更多的例項具體說說。 例項一:獲得

MATLAB神經網路程式設計——BP神經網路的實現

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

MATLAB神經網路程式設計——BP神經網路的模型結構與學習規則

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

神經網路學習3————BP神經網路以及python實現

一、BP神經網路結構模型                BP演算法的基本思想是,學習過程由訊號的正向傳播和誤差的反向傳播倆個過程組成,輸入從輸入層輸入,經隱層處理以後,傳向輸出層。如果輸出層的實際輸出和期望輸出不符合

神經網路學習2————線性神經網路以及python實現

一、線性神經網路結構模型 在結構上與感知器非常相似,只是神經元啟用函式不同,結構如圖所示: 若網路中包含多個神經元節點,就可形成多個輸出,這種神經網路可以用一種間接的方式解決線性不可分的問題,方法是用多個線性含糊對區域進行劃分,神經結構和解決異或問題如圖所示:  &nbs

序列模型2-----迴圈神經網路RNN

一、RNN的作用: RNN可解決的問題: 訓練樣本輸入是連續的序列,且序列的長短不一,比如基於時間的序列:一段段連續的語音,一段段連續的手寫文字。這些序列比較長,且長度不一,比較難直接的拆分成一個個獨立的樣本來通過DNN/CNN進行訓練。 二、RNN模型:   上圖中左邊是RNN模型沒

java深度學習框架Deeplearning4j實戰BP神經網路分類器

1、Deeplearning4j 深度學習,人工智慧今天已經成了IT界最流行的詞,而tensorflow,phython又是研究深度學習神經網路的熱門工具。tensorflow是google的出品,而phython又以簡練的語法,獨特的程式碼結構和語言特性為眾多資料科學家和

Linux:atime、mtime、ctime

Linux、atime、mtime、ctatime、mtime、ctime三者稱為文件的時間戳,是文件的元信息中的七個之一,包含在inode中。其中:atime(Accesstime)指的是文件最後一次被訪問的時間;mtime(Modifytime)指的是文件內容被修改的時間,但不包括權限的修改,比如用vim

Linux:用戶賬戶管理下的/etc/passwd和/etc/shadow

Linux、/etc/passwd用戶賬戶管理主要有如下幾個配置文件:/etc/passwd、/etc/shadow、/etc/group和用戶郵箱/var/spool/mail,今天著重要說明一下/etc/passwd和/etc/shadow兩個配置文件/etc/passwd:記錄了Linux系統上所有的帳

爬蟲爬取網易新聞

學習了python基本語法後,對爬蟲產生了很大的興趣,廢話不多說,今天來爬取網易新聞,實戰出真知。 開啟網易新聞(https://news.163.com/)可以發現新聞分為這樣的幾個板塊: 這次選擇國內板塊來爬取文章。 1.準備 環境:python3 編譯器:PyChar

PythonPython多版本共存安裝

Python的安裝 進入Python官方網站:www.python.org下載系統對應的Python版本 按照提示步奏安裝,安裝路徑選擇自定義,方便查詢 安裝完成後,按win+R鍵,輸入cmd進入cmd程式,輸入Python,如果能夠進入互動環境,則表示安裝完成 Python多版本共存

Python數據類型

雙引號 數據類型 height tuple 多個 ruby 一個 加法 hat 數據類型(預了解)   1.數字類型 整型:int 即不帶小數點的數,通常用來標識年齡,賬號,身份證號,等級等整數。 浮點型:float 即帶有小數點的數,通常用來標記身高,體重,科學

ITIP基礎

IT菜鳥,以後研究的方向是雲端計算,從基礎的開始,這是第一篇博文。有不對的地方希望大家指正。IP是網路知識的基礎,今天就開始學習IP。 IP地址格式:IP地址就是“網路地址+主機地址”。 IP地址分類: IP地址是由32個二進位制數來表示,為了方便記憶,分成四段8位二進位

SSHStruts2的配置

 一、下載struts2 我用的是struts-2.3.14-all.zip這個版本,下載完後,解壓到本地磁碟,該資料夾包含如下檔案結構: 2、建立一個web project專案 3、匯入Struts2所需jar包 4、配置web.xml

JAVAJFrame

JFrame是JAVA中視覺化窗體,從這出發我們可以學習到很多東西。我們會學習到JFrame的一些方法。如果對這些方法不瞭解的話,可以通過查閱API檔案,獲取其使用方法。 窗體的建立 JFrame在swing包中,而swing是JAVA自身的。就是說只需有JAVA虛擬機

2015旅,2016我要飛得更高

看到標題的猿友應該都覺得博主應該有點小天真,沒錯!博主就是2015本科畢業生一枚!14年12月份開始,先後在兩家公司實習4個月、2個月,6月份拿到畢業生正式入職,至今博主工作已有一年了,博主是Java開發的。一年裡,收穫許多,讓我十分慶幸的是開始認真在csdn寫

從零開始 Web 移動Webtouch事件的缺陷,移動端常用插件

bar 知識 怎麽 element clas mas index ont 彈性 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博