樓主解決沒?這是我知道的
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %歸一化數據,方便後面的預測
net.trainParam. show = 100; %這里的show是顯示步數,每100步顯示一次
net.trainParam.goal=0.0001; %目標誤差,訓練得到的數據和原始輸入
net.trainParam.lr = 0.01; %lr是學習動量,一般越小越好
y1=sim(net,pn); %sim用來預測的
xlswrite('testdata6',tnew1); ?這里的testdata6是excel表格的名稱
你可以看看書的,書上都有介紹
② BP神經網路程序,在程序訓練後,誤差也達到了合適的范圍,如何把輸出值顯示出來
訓練好後,你自己定義的net就是結果,只要把它的權值和閾值導出來即可。
W1=net.IW{1,1};
W2=net.LW{2,1};
B1=net.b{1};
B2=net.b{2};
解釋一下:專
net.IW 屬性定義了屬從網路輸入向量到網路層的權值向量(即輸入層的權值向量)結構。其值為Nl*Ni的細胞矩陣,Nl為網路層數(net.numLayers),Ni為輸入向量數(net.numInputs)。通過訪問net.IW{i,j},可以獲得第i 個網路層來自第j 個輸入向量的權值向量值。 所以一般情況下net,iw{1,1}就是輸入層和隱含層之間的權值。
net.LW定義了從一個網路層到另一個網路層的權值向量結構。其值為Nl*Nl的細胞矩陣,Nl為網路層數(net.numLayers)。通過訪問net.LW{i,j},可以獲得第i 個網路層來自第j 個網路層的權值向量值。 因此,如果網路是單隱含層,net.lw{2,1}就是輸出層和隱含層之間的權值。
③ 關於構建一個三層BP神經網路對葯品的銷售進行預測(程序由matlab編寫)
clear all;
close all;
clc;
%p = [2056 2395 2600 2298 1634 1600 1837 1478 1900 2395 2600 2298 1634 1600 1873 1478 1900 1500 2600 2298 1634 1600 1873 1478 1900 1500 2046];
t = [1873 1478 1900 1500 2046 1556];
p = [ 2056 2395 2600 2298 1634 1600];
%--歸一化輸入輸出-- 映射到[0,1]--%
pmax = max(p);
pmin = min(p);
P = (p-pmin)./(pmax-pmin);
tmax = max(t);
tmin = min(t);
T = (t-tmin)./(tmax-tmin);
net =newff(P,T,5,{'tansig','purelin'},'traingdx');
%--設置訓練參數--%
net.trainParam.show =50;
net.trainParam.lr = 0.05;
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.divideFcn= '';
[net,tr] = train(net,P,T);
A =sim(net,P);
a =A.*(tmax - tmin)+tmin;
x = 7:12;
figure
plot(x,t,'+');
hold on;
plot(x,a,'or');
hold off;
xlabel('month');
ylabel('**')
legend('實際','預測')
④ BP神經網路程序不收斂怎麼辦
收斂和迭代演算法有關.
反向傳播演算法是定義一個誤差er(往往是輸出結果與預想結果之間的某個范數),然後求出滿足誤差極小的權向量.如果把誤差看成一個連續函數(泛函)的話,求對權向量各分量的偏導為0即森嘩可,但是實際上它是離散的,所以我們需要用迭代來求最小梯度.
如果是新定義演算法的話理論上的收斂要扒漏證明,可以證明它在迭代次數趨近無窮的時候等於某一解,也可以證明它滿足李普希茲條件(就是帶有完備范數和李普希茲常數的那個),這種情形下我們叫做收斂,要是用已有演算法或者乾脆就是BP演算法的時候不需要你證明.理論上不收斂的情況是這樣,當迭代次數趨近無窮的時候,權向量的解不唯一.
實際上的收斂是這樣,給定一個最大此此行迭代次數n,一個誤差限erl,反向傳播演算法應該很容易找,我不往上寫了,每一步權值修正都會使er減小,直觀的看就是權向量的分量沿著梯度減小的方向在前進,雖然理論上樣本足夠大並且n趨於無窮的時候會收斂,但是實際上有可能出現當迭代到第n次,誤差er依然大於誤差限erl的情況,也就是說我們沒有解出來滿足要求的權向量,所以網路訓練失敗,叫做不收斂.當然,也可以使用梯度限來作為迭代終止的條件,這種情況下不收斂就是梯度在迭代了n次以後沒有小於某一值,從而沒有求出滿足要求的權向量;收斂就是求出了滿足梯度限的權向量
⑤ BP神經網路matlab源程序代碼講解
newff 創建前向BP網路格式:
net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF)
其中:PR —— R維輸入元素的R×2階最大最小值矩陣; Si —— 第i層神經元的個數,共N1層; TFi——第i層的轉移函數,默認『tansig』; BTF—— BP網路的訓練函數,默認『trainlm』; BLF—— BP權值/偏差學習函數,默認』learngdm』 PF ——性能函數,默認『mse』;(誤差)
e.g.
P = [0 1 2 3 4 5 6 7 8 9 10];T = [0 1 2 3 4 3 2 1 2 3 4];
net = newff([0 10],[5 1],{'tansig' 'purelin'});net.trainparam.show=50; %每次循環50次net.trainParam.epochs = 500; %最大循環500次
net.trainparam.goal=0.01; %期望目標誤差最小值
net = train(net,P,T); %對網路進行反復訓練
Y = sim(net,P)Figure % 打開另外一個圖形窗口
plot(P,T,P,Y,'o')
⑥ BP神經網路matlab程序出錯,還請各位不吝賜教,謝謝了
你應該用的是新版的matlab,但是你的newff卻是按照舊版的格式來輸入族毀櫻的,所以出錯。
修改為net=newff(P1',T1',10,{'tansig','logsig'余租},'trainlm')。10為隱含層的神經元個數,輸入層和輸出層由輸入樣本和輸出樣本決定(新兆叢版matlab自動根據樣本情況設定),tansig為隱含層到輸出層的傳輸函數,logsig為輸出層到輸出的傳輸函數
⑦ 求一個bp神經網路預測模型的MATLAB程序
BP神經網路預測的步驟:
1、輸入和輸出數據。
2、創建網路。fitnet()
3、劃分訓練,測試和驗證數據的比例。net.divideParam.trainRatio;net.divideParam.valRatio;net.divideParam.testRatio
4、訓練網路。train()
5、根據圖表判斷擬合好壞。ploterrcorr();parcorr();plotresponse()
6、預測往後數據。net()
7、畫出預測圖。plot()
執行下列命令
BP_prediction
得到結果:
[ 2016, 14749.003045557066798210144042969]
[ 2017, 15092.847215188667178153991699219]
[ 2018, 15382.150005970150232315063476562]
[ 2019, 15398.85769711434841156005859375]
[ 2020, 15491.935150090605020523071289062]
⑧ BP神經網路——Python簡單實現三層神經網路(Numpy)
我們將在Python中創建一個NeuralNetwork類,以訓練神經元以給出准確的預測。該課程還將具有其他幫助程序功能。
1. 應用Sigmoid函數
我們將使用 Sigmoid函數 (它繪制一條「 S」形曲線)作為神經網路的激活函數。
2. 訓練模型
這是我們將教神經網路做出准確預測的階段。每個輸入將具有權重(正或負)。
這意味著具有大量正權重或大量負權重的輸入將對結果輸出產生更大的影響。
我們最初是將每個權重分配給一個隨機數。
本文參考翻譯於此網站 —— 原文
⑨ BP神經網路原理
人工神經網路有很多模型,但是日前應用最廣、基本思想最直觀、最容易被理解的是多層前饋神經網路及誤差逆傳播學習演算法(Error Back-Prooaeation),簡稱為BP網路。
在1986年以Rumelhart和McCelland為首的科學家出版的《Parallel Distributed Processing》一書中,完整地提出了誤差逆傳播學習演算法,並被廣泛接受。多層感知網路是一種具有三層或三層以上的階層型神經網路。典型的多層感知網路是三層、前饋的階層網路(圖4.1),即:輸入層、隱含層(也稱中間層)、輸出層,具體如下:
圖4.1 三層BP網路結構
(1)輸入層
輸入層是網路與外部交互的介面。一般輸入層只是輸入矢量的存儲層,它並不對輸入矢量作任何加工和處理。輸入層的神經元數目可以根據需要求解的問題和數據表示的方式來確定。一般而言,如果輸入矢量為圖像,則輸入層的神經元數目可以為圖像的像素數,也可以是經過處理後的圖像特徵數。
(2)隱含層
1989年,Robert Hecht Nielsno證明了對於任何在閉區間內的一個連續函數都可以用一個隱層的BP網路來逼近,因而一個三層的BP網路可以完成任意的n維到m維的映射。增加隱含層數雖然可以更進一步的降低誤差、提高精度,但是也使網路復雜化,從而增加了網路權值的訓練時間。誤差精度的提高也可以通過增加隱含層中的神經元數目來實現,其訓練效果也比增加隱含層數更容易觀察和調整,所以一般情況應優先考慮增加隱含層的神經元個數,再根據具體情況選擇合適的隱含層數。
(3)輸出層
輸出層輸出網路訓練的結果矢量,輸出矢量的維數應根據具體的應用要求來設計,在設計時,應盡可能減少系統的規模,使系統的復雜性減少。如果網路用作識別器,則識別的類別神經元接近1,而其它神經元輸出接近0。
以上三層網路的相鄰層之間的各神經元實現全連接,即下一層的每一個神經元與上一層的每個神經元都實現全連接,而且每層各神經元之間無連接,連接強度構成網路的權值矩陣W。
BP網路是以一種有教師示教的方式進行學習的。首先由教師對每一種輸入模式設定一個期望輸出值。然後對網路輸入實際的學習記憶模式,並由輸入層經中間層向輸出層傳播(稱為「模式順傳播」)。實際輸出與期望輸出的差即是誤差。按照誤差平方最小這一規則,由輸出層往中間層逐層修正連接權值,此過程稱為「誤差逆傳播」(陳正昌,2005)。所以誤差逆傳播神經網路也簡稱BP(Back Propagation)網。隨著「模式順傳播」和「誤差逆傳播」過程的交替反復進行。網路的實際輸出逐漸向各自所對應的期望輸出逼近,網路對輸入模式的響應的正確率也不斷上升。通過此學習過程,確定下各層間的連接權值後。典型三層BP神經網路學習及程序運行過程如下(標志淵,2006):
(1)首先,對各符號的形式及意義進行說明:
網路輸入向量Pk=(a1,a2,...,an);
網路目標向量Tk=(y1,y2,...,yn);
中間層單元輸入向量Sk=(s1,s2,...,sp),輸出向量Bk=(b1,b2,...,bp);
輸出層單元輸入向量Lk=(l1,l2,...,lq),輸出向量Ck=(c1,c2,...,cq);
輸入層至中間層的連接權wij,i=1,2,...,n,j=1,2,...p;
中間層至輸出層的連接權vjt,j=1,2,...,p,t=1,2,...,p;
中間層各單元的輸出閾值θj,j=1,2,...,p;
輸出層各單元的輸出閾值γj,j=1,2,...,p;
參數k=1,2,...,m。
(2)初始化。給每個連接權值wij、vjt、閾值θj與γj賦予區間(-1,1)內的隨機值。
(3)隨機選取一組輸入和目標樣本
(4)用輸入樣本
基坑降水工程的環境效應與評價方法
bj=f(sj) j=1,2,...,p (4.5)
(5)利用中間層的輸出bj、連接權vjt和閾值γt計算輸出層各單元的輸出Lt,然後通過傳遞函數計算輸出層各單元的響應Ct。
基坑降水工程的環境效應與評價方法
Ct=f(Lt) t=1,2,...,q (4.7)
(6)利用網路目標向量
基坑降水工程的環境效應與評價方法
(7)利用連接權vjt、輸出層的一般化誤差dt和中間層的輸出bj計算中間層各單元的一般化誤差
基坑降水工程的環境效應與評價方法
(8)利用輸出層各單元的一般化誤差
基坑降水工程的環境效應與評價方法
(9)利用中間層各單元的一般化誤差
基坑降水工程的環境效應與評價方法
(10)隨機選取下一個學習樣本向量提供給網路,返回到步驟(3),直到m個訓練樣本訓練完畢。
(11)重新從m個學習樣本中隨機選取一組輸入和目標樣本,返回步驟(3),直到網路全局誤差E小於預先設定的一個極小值,即網路收斂。如果學習次數大於預先設定的值,網路就無法收斂。
(12)學習結束。
可以看出,在以上學習步驟中,(8)、(9)步為網路誤差的「逆傳播過程」,(10)、(11)步則用於完成訓練和收斂過程。
通常,經過訓練的網路還應該進行性能測試。測試的方法就是選擇測試樣本向量,將其提供給網路,檢驗網路對其分類的正確性。測試樣本向量中應該包含今後網路應用過程中可能遇到的主要典型模式(宋大奇,2006)。這些樣本可以直接測取得到,也可以通過模擬得到,在樣本數據較少或者較難得到時,也可以通過對學習樣本加上適當的雜訊或按照一定規則插值得到。為了更好地驗證網路的泛化能力,一個良好的測試樣本集中不應該包含和學習樣本完全相同的模式(董軍,2007)。