Ⅰ BP神經網路如何把訓練後的權值輸入至MATLAB 建立網路 完成預測
這個就只能自己編M文件實現了,給個例子你看看
% script: main_batch.m
% 批量方式訓練BP網路,實現性別識別
%% 清理
clear all
clc
%% 讀入數據
% xlsfile='student.xls';
[data,label]=getdata();
%% 劃分數據
[traind,trainl,testd,testl]=divide(data,label);
%% 設置參數
rng('default')
rng(0)
nTrainNum = 60; % 60個訓練樣本
nSampDim = 2; % 樣本是2維的
%% 構造網路
net.nIn = 2; % 輸入層2個神經元,分別輸入身高、體重
net.nHidden = 3; % 3個隱含層節點
net.nOut = 1; % 1個輸出層節點
w = 2*(rand(net.nHidden,net.nIn)-1/2); % nHidden * 3 一行代表一個隱含層節點
b = 2*(rand(net.nHidden,1)-1/2);
net.w1 = [w,b];
W = 2*(rand(net.nOut,net.nHidden)-1/2);
B = 2*(rand(net.nOut,1)-1/2);
net.w2 = [W,B];
%% 訓練數據歸一化
mm=mean(traind);
% 均值平移
for i=1:2
traind_s(:,i)=traind(:,i)-mm(i);
end
% 方差標准化
ml(1) = std(traind_s(:,1));
ml(2) = std(traind_s(:,2));
for i=1:2
traind_s(:,i)=traind_s(:,i)/ml(i);
end
%% 訓練
SampInEx = [traind_s';ones(1,nTrainNum)];
expectedOut=trainl;
eb = 0.01; % 誤差容限
eta = 0.6; % 學習率
mc = 0.8; % 動量因子
maxiter = 2000; % 最大迭代次數
iteration = 0; % 第一代
errRec = zeros(1,maxiter);
outRec = zeros(nTrainNum, maxiter);
NET=[]; % 記錄
% 開始迭代
for i = 1 : maxiter
hid_input = net.w1 * SampInEx; % 隱含層的輸入
hid_out = logsig(hid_input); % 隱含層的輸出
ou_input1 = [hid_out;ones(1,nTrainNum)]; % 輸出層的輸入
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2); % 輸出層的輸出
outRec(:,i) = out_out'; % 記錄每次迭代的輸出
err = expectedOut - out_out; % 誤差
sse = sumsqr(err);
errRec(i) = sse; % 保存誤差值
fprintf('第 %d 次迭代 誤差: %f\n', i, sse);
iteration = iteration + 1;
% 判斷是否收斂
if sse<=eb
break;
end
% 誤差反向傳播
% 隱含層與輸出層之間的局部梯度
DELTA = err.*dlogsig(ou_input2,out_out);
% 輸入層與隱含層之間的局部梯度
delta = net.w2(:,1:end-1)' * DELTA.*dlogsig(hid_input,hid_out);
% 權值修改量
dWEX = DELTA*ou_input1';
dwex = delta*SampInEx';
% 修改權值,如果不是第一次修改,則使用動量因子
if i == 1
net.w2 = net.w2 + eta * dWEX;
net.w1 = net.w1 + eta * dwex;
else
net.w2 = net.w2 + (1 - mc)*eta*dWEX + mc * dWEXOld;
net.w1 = net.w1 + (1 - mc)*eta*dwex + mc * dwexOld;
end
% 記錄上一次的權值修改量
dWEXOld = dWEX;
dwexOld = dwex;
end
%% 測試
% 測試數據歸一化
for i=1:2
testd_s(:,i)=testd(:,i)-mm(i);
end
for i=1:2
testd_s(:,i)=testd_s(:,i)/ml(i);
end
% 計算測試輸出
InEx=[testd_s';ones(1,260-nTrainNum)];
hid_input = net.w1 * InEx;
hid_out = logsig(hid_input); % output of the hidden layer nodes
ou_input1 = [hid_out;ones(1,260-nTrainNum)];
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2);
out_out1=out_out;
% 取整
out_out(out_out<0.5)=0;
out_out(out_out>=0.5)=1;
% 正確率
rate = sum(out_out == testl)/length(out_out);
%% 顯示
% 顯示訓練樣本
train_m = traind(trainl==1,:);
train_m=train_m';
train_f = traind(trainl==0,:);
train_f=train_f';
figure(1)
plot(train_m(1,:),train_m(2,:),'bo');
hold on;
plot(train_f(1,:),train_f(2,:),'r*');
xlabel('身高')
ylabel('體重')
title('訓練樣本分布')
legend('男生','女生')
figure(2)
axis on
hold on
grid
[nRow,nCol] = size(errRec);
plot(1:nCol,errRec,'LineWidth',1.5);
legend('誤差平方和');
xlabel('迭代次數','FontName','Times','FontSize',10);
ylabel('誤差')
fprintf(' ----------------錯誤分類表----------\n')
fprintf(' 編號 標簽 身高 體重\n')
ind= find(out_out ~= testl);
for i=1:length(ind)
fprintf(' %4d %4d %f %f \n', ind(i), testl(ind(i)), testd(ind(i),1), testd(ind(i),2));
end
fprintf('最終迭代次數\n %d\n', iteration);
fprintf('正確率:\n %f%%\n', rate*100);
Ⅱ BP神經網路中初始權值和閾值的設定
1、首先需要了解BP神經網路是一種多層前饋網路。
Ⅲ BP神經網路中初始權值隨機生成與給定確定數對最後連接權值有什麼不同的影響最後獲得的連接權值會不會改變
BP網路多次訓練得到的結果是不同的,原因就是權值的偽隨機生成.權值給定值和偽回隨機數有可能產生不同影響答,最終得到的權值可能會改變.
原因是這樣的,BP神經網路權值的迭代是局部尋優,往往找到的是極小值.給一個初值以後,如果恰好收斂的極小值是最小值,效果就好一些,反之,效果就差一些.當然,權值向量的分量並非獨立,他們的關系非常非常復雜,我的那種說法是一個簡單的比喻.
BP網路的很多優化演算法就是專門針對權值的初值整定的.
Ⅳ 神經網路權值怎麼確定
(1)初始時,每個權值由隨機數函數產生,值的范圍為[-1,1]之間
(2)運行過程中,通過BP演算法求得均方誤差的梯度,然後調整BP網路的權值.如:w(i,j,k+1)=w(i,j,k)+Delta(e(i,j)).
Ⅳ BP神經網路方法
人工神經網路是近幾年來發展起來的新興學科,它是一種大規模並行分布處理的非線性系統,適用解決難以用數學模型描述的系統,逼近任何非線性的特性,具有很強的自適應、自學習、聯想記憶、高度容錯和並行處理能力,使得神經網路理論的應用已經滲透到了各個領域。近年來,人工神經網路在水質分析和評價中的應用越來越廣泛,並取得良好效果。在這些應用中,縱觀應用於模式識別的神經網路,BP網路是最有效、最活躍的方法之一。
BP網路是多層前向網路的權值學習採用誤差逆傳播學習的一種演算法(Error Back Propagation,簡稱BP)。在具體應用該網路時分為網路訓練及網路工作兩個階段。在網路訓練階段,根據給定的訓練模式,按照「模式的順傳播」→「誤差逆傳播」→「記憶訓練」→「學習收斂」4個過程進行網路權值的訓練。在網路的工作階段,根據訓練好的網路權值及給定的輸入向量,按照「模式順傳播」方式求得與輸入向量相對應的輸出向量的解答(閻平凡,2000)。
BP演算法是一種比較成熟的有指導的訓練方法,是一個單向傳播的多層前饋網路。它包含輸入層、隱含層、輸出層,如圖4-4所示。
圖4-4 地下水質量評價的BP神經網路模型
圖4-4給出了4層地下水水質評價的BP神經網路模型。同層節點之間不連接。輸入信號從輸入層節點,依次傳過各隱含層節點,然後傳到輸出層節點,如果在輸出層得不到期望輸出,則轉入反向傳播,將誤差信號沿原來通路返回,通過學習來修改各層神經元的權值,使誤差信號最小。每一層節點的輸出隻影響下一層節點的輸入。每個節點都對應著一個作用函數(f)和閾值(a),BP網路的基本處理單元量為非線性輸入-輸出的關系,輸入層節點閾值為0,且f(x)=x;而隱含層和輸出層的作用函數為非線性的Sigmoid型(它是連續可微的)函數,其表達式為
f(x)=1/(1+e-x) (4-55)
設有L個學習樣本(Xk,Ok)(k=1,2,…,l),其中Xk為輸入,Ok為期望輸出,Xk經網路傳播後得到的實際輸出為Yk,則Yk與要求的期望輸出Ok之間的均方誤差為
區域地下水功能可持續性評價理論與方法研究
式中:M為輸出層單元數;Yk,p為第k樣本對第p特性分量的實際輸出;Ok,p為第k樣本對第p特性分量的期望輸出。
樣本的總誤差為
區域地下水功能可持續性評價理論與方法研究
由梯度下降法修改網路的權值,使得E取得最小值,學習樣本對Wij的修正為
區域地下水功能可持續性評價理論與方法研究
式中:η為學習速率,可取0到1間的數值。
所有學習樣本對權值Wij的修正為
區域地下水功能可持續性評價理論與方法研究
通常為增加學習過程的穩定性,用下式對Wij再進行修正:
區域地下水功能可持續性評價理論與方法研究
式中:β為充量常量;Wij(t)為BP網路第t次迭代循環訓練後的連接權值;Wij(t-1)為BP網路第t-1次迭代循環訓練後的連接權值。
在BP網路學習的過程中,先調整輸出層與隱含層之間的連接權值,然後調整中間隱含層間的連接權值,最後調整隱含層與輸入層之間的連接權值。實現BP網路訓練學習程序流程,如圖4-5所示(倪深海等,2000)。
圖4-5 BP神經網路模型程序框圖
若將水質評價中的評價標准作為樣本輸入,評價級別作為網路輸出,BP網路通過不斷學習,歸納出評價標准與評價級別間復雜的內在對應關系,即可進行水質綜合評價。
BP網路對地下水質量綜合評價,其評價方法不需要過多的數理統計知識,也不需要對水質量監測數據進行復雜的預處理,操作簡便易行,評價結果切合實際。由於人工神經網路方法具有高度民主的非線性函數映射功能,使得地下水水質評價結果較准確(袁曾任,1999)。
BP網路可以任意逼近任何連續函數,但是它主要存在如下缺點:①從數學上看,它可歸結為一非線性的梯度優化問題,因此不可避免地存在局部極小問題;②學習演算法的收斂速度慢,通常需要上千次或更多。
神經網路具有學習、聯想和容錯功能,是地下水水質評價工作方法的改進,如何在現行的神經網路中進一步吸取模糊和灰色理論的某些優點,建立更適合水質評價的神經網路模型,使該模型既具有方法的先進性又具有現實的可行性,將是我們今後研究和探討的問題。
Ⅵ BP神經網路連接權值如何確定
確認方法:
統計學認為,在統計中計算平均數等指標時,對各個變數版值具有權衡輕重作用的數權值就稱為權數。
例子:求下列數串的平均數
3、4、3、3、3、2、4、4、3、3、
一般求法為(3+4+3+3+3+2+4+4+3+3)/10=3.2
加權求法為(6*3+3*4+2)/10=3.2
其中3出現6次,4出現3次,2出現1次.6、3、1就叫權數。這種方法叫加權法。
一般說的平均數,就是把所有的數加起來,再除以這些數的總個數。表示為:
(p1+p2+p3+…..+pn)/n;
但有的數據記錄中有一些相同的數據,在計算的時候,那一個數有幾個相同數,就把這個數乘上幾,這個幾,就叫權,加權,就是乘上幾後再加。平均數還是要除以總個數。
還是以上面的各個數為例:
它們每個數都有一些相同數,表示為:k1,k2,k3…….kn;
加權平均的公式是:(k1p1+k2p2+k3p3+……knpn)/(k1+k2+k3+…..kn)
Ⅶ 急急急!!bp神經網路權值和閾值的變化問題 以及神經網路c++編程問題~~
變化是肯定的,否則不會收斂。建議神經網路收斂後,把所有權值和域值保存在一個文件中。下次使用時再把這些值提到網路中,不需要每次都學習一遍。如果需要幫助,你可以把程序發到:85825615@qq.com