院系: 電氣工程學院
班級: 電氣工程dsfasd
姓名: dsfa
學號: dfad7
時間: 2009-11-28
實驗二基於bp網路的多層感知器
一:實驗原理:
bp的基本思想:訊號的正向傳播誤差的反向傳播
–訊號的正向傳播:輸入樣本從輸入層傳入,經各隱層逐層處理後,傳向輸出層。
–誤差的反向傳播:將輸入誤差以某種形式通過隱層向輸入層逐層反傳,並將誤差分攤給各層的所有單元,從而獲得各層單元的誤差訊號來作為修正各單元權值的依據。
1. 基本bp演算法的多層感知器模型:
2.bp學習演算法的推導:
當網路輸出與期望輸出不等時,存在輸出誤差e
將上面的誤差定義式展開至隱層,有
進一步展開至輸入層,有
調整權值的原則是使誤差不斷地減小,因此應使權值的調整量與誤差的梯度下降成正比,即
η∈(0,1)表示比例係數,在訓練中反應學習速率
bp演算法屬於δ學習規則類,這類演算法被稱為誤差的梯度下降(gradient descent)演算法。
二: 實驗內容 :
hermit多項式如下式所示:f(x)=1.1(1-x+2x^2)exp(-x^2/2)
採用bp演算法設計乙個單輸入單輸出的多層感知器對該函式進行逼近。
訓練樣本按以下方法產生:樣本數p=100,其中輸入樣本xi服從區間[-4,4]內的均勻分布,樣本輸出為f(xi)+ei ,ei為新增的雜訊,服從均值為0,標準差為0.1的正態分佈。
隱層採用sigmoid啟用函式f(x)=1/(1+1/e^x),輸出層採用線性啟用函式f(x)=x。
注意:輸出層採用的線性啟用函式,不是sigmoid啟用函式,所以迭代公式需要根據前面的推導過程重新推導。
三:實驗步驟:
1. 用matlab程式設計,實現解決該問題的單樣本訓練bp網路,設定乙個停止迭代的誤差emin和最大迭代次數。在除錯過程中,通過不斷調整隱層節點數,學習率η,找到收斂速度快且誤差小的一組引數。
產生均勻分布在區間[-4,4]的測試樣本,輸入建立的模型得到輸出,與hermit多項式的期望輸出進行比較計算總誤差(執行5次,取平均值),並記錄下每次迭代結束時的迭代次數。
(要求誤差計算使用rme,emin 設定為0.1)
程式如下:
function danyangben1%建立以danyangben1為檔名的m檔案
clc;
close all;
x=[-4:0.08:4];%產生樣本
j=input('請輸入隱層節點數 j = ');%隱層節點數
n=input('請輸入學習效率 n = ');%學習效率
w=rand(1,j);%對權值w賦較小的初值
w0=0.5;%對權值w0賦較小的初值
v=rand(1,j);%對權值v賦較小的初值
v1=rand(1,j);%對權值v1賦較小的初值
x0=-1;%對閾值x0賦初值
y0=-1;%對閾值y0賦初值
err=zeros(1,101);
zhaosheng=0.01*randn(1,101);%雜訊
wucha=0;
erro=;
erme=0;
yadong=;
emin=0.1;
d=zeros(1,101);%以初值0賦給期望輸出
for m=1:101
d(1,m)=hermit(x(1,m));%以hermit多項式產生期望輸出
end;
o=zeros(1,101);
***j=zeros(1,j);
***=zeros(1,j);
y=zeros(1,j);
p=1;
q=1;
azc=0;
acs=0;
for z=1:5
while q<30000 %設定最大的迭代交數
for p=1:101 %計算隱層的輸出
for i=1:j
***j(1,i)=v(1,i)*x(1,p)+v1(1,i)*x0;
y(1,i)=1/(1+exp(-***j(1,i)));
end;
o(1,p)=w*y'+y0*w0+zhaosheng(p);%計算輸出並給輸出加上上定的擾動
wucha=1/2*(d(1,p)-o(1,p))*(d(1,p)-o(1,p));%計算誤差
err(1,p)=wucha;
erro=[erro,wucha];
for m=1:j;%調整各層的權值
w0=w0-n*w0;
w(1,m)=w(1,m)+n*(d(1,p)-o(1,p))*y(1,m);
v(1,m)=v(1,m)+n*(d(1,p)-o(1,p))*w(1,m)*y(1,m)*(1-y(1,m))*x(1,p);
v1(1,m)=v1(1,m)+n*(d(1,p)-o(1,p))*w(1,m)*y(1,m)*(1-y(1,m))*x0;
end;
q=q+1;
end;
erme=0;
for t=1:101;
erme=erme+err(1,t);
end;
err=zeros(1,101);
erme=sqrt(erme/101);
yadong=[yadong,erme];
if ermeend;
end;%輸入結果
azc=azc+erme;
acs=acs+q;
enddisp('平均誤差:');
pjwc=1/5*azc
plot(x,d,'--r');
hold on;
plot(x,o,'--b');
disp('平均次數:');
pjcx=1/5*acs
figure(2);
plot(yadong);
figure(3);
plot(x,d);
endfunction f = hermit(x)
f = 1.1*(1-x+2*x^2)*exp(-x^2/2);
end2. 實現解決該問題的批處理訓練bp網路,調整引數如上。產生均勻分布在區間[-4,4]的測試樣本,輸入建立的模型得到輸出,與hermit多項式的期望輸出進行比較計算總誤差(執行5次,取平均值),並記錄下每次迭代結束時的迭代次數。
程式如下:
執行結果如下:
function pichuli %批處理
close all;
clc;
x=[-4:0.08:4];%樣本101個
j=input('請輸入隱層節點數 j = ');%隱層節點數
n=input('請輸入學習效率 n = ');%學習效率
a=0.1;%動量係數
w=rand(1,j);
v=rand(1,j);
err=zeros(1,101);
wucha=0;
zhaosheng=0.01*randn(1,101);%雜訊
erro=;
erro=;%誤差,為畫收斂曲線準備
emin=0.1;
d=zeros(1,101);
for m=1:101
d(1,m)=hermit(x(m));%期望
end;
o=zeros(1,101);
***j=zeros(1,j);
***=zeros(1,j);
y=zeros(1,j);
p=1;
q=1;
while q<30000
erro=0;
erme=0;
for p=1:101
for i=1:j
***j(1,i)=v(1,i)*x(1,p);
y(1,i)=1/(1+exp(-***j(1,i)));
end;
o(1,p)=w*y'+zhaosheng(p);%雜訊
wucha=d(1,p)-o(1,p);%誤差
err(1,p)=1/2*wucha^2;
erro=[erro,wucha];
q=q+1;
end;
for t=1:101;
erro=erro+erro(t);
erme=erme+err(1,t);
end;
erro=;
for m=1:j;
w(1,m)=w(1,m)+n*erro*y(1,m);
v(1,m)=v(1,m)+n*erro*w(1,m)*y(1,m)*(1-y(1,m))*x(1,p);
end;
erme=sqrt(erme/101);
erro=[erro,erme];
if ermeend;
end;
figure(1);
plot(x,d,'--r');
BP神經網路實驗報告
一 實驗目的 1 熟悉matlab中神經網路工具箱的使用方法 2 通過在matlab下面程式設計實現bp網路逼近標準正弦函式,來加深對bp網路的了解和認識,理解訊號的正向傳播和誤差的反向傳遞過程。二 實驗原理 由於傳統的感知器和線性神經網路有自身無法克服的缺陷,它們都不能解決線性不可分問題,因此在實...
神經網路學習報告
1 什麼是神經網路?神經網路是一種應用類似於大腦神經突觸聯接的結構進行資訊處理的數學模型。它是由大量功能單一的神經元構成,具有很好的學習能力和泛化能力。神經元作為神經網路的基本構成單元,其主要由突觸 加法器以及啟用函式組成。突觸用於訊號的輸入,加法器用於將輸入訊號進行相應的計算,啟用函式用來限制神經...
bp神經網路
實驗四計算智慧型 1 1 實驗目的 理解反向傳播網路的結構和原理,掌握反向傳播演算法對神經元的訓練過程,了解反向傳播公式。通過構建bp網路例項,熟悉前饋網路的原理及結構。2 實驗內容 編寫乙個bp神經網路程式,實現簡單的分類。3 實驗報告要求 1 簡述實驗原理及方法,並請給出程式設計流程圖。bp演算...