A. 直接用神經網路工具箱構建bp神經網路,希望能給個例子說明,有註解最好,本人matlab新手,謝謝
BP(Back Propagation)神經網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層專前饋網路,是目前應用屬最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hidden layer)和輸出層(output layer)。
附件就是利用神經網路工具箱構建BP神經網路進行預測的實例。如果要用可視化工具,可以在命令窗口輸入nntool.
B. matlab BP神經網路 performance 圖這五條線的詳細解釋
橫縱坐標不用說了,圖上三條有顏色的實線分別是:BP訓練過程的MSE指標在每一代中的表現,BP交叉驗證過程的MSE指標在每一代中的表現,BP測試過程的MSE指標在每一代中的表現。尤其你要注意那條TEST紅線,那是你的BP計算/訓練結果。
BEST虛線說明BP網路訓練到第八代的時候BP訓練結果最理想。
GOAL虛線是你編程或者直接用的MATLAB的ANN工具箱去訓練這個BP時,設置的網路訓練停止目標(之一)。
C. 如何用MATLAB的神經網路工具箱實現三層BP網路
使用神經網路工具箱可以非常簡便地實現網路建立和訓練,實例代碼如下:
%%BP演算法
functionOut=bpnet(p,t,p_test)
%p,t為樣本需要提前組織好
globalS1
net=newff(minmax(p),[S1,8],{'tansig','purelin'},'trainlm');%trainlm訓練函數最有效
%net=newff(P,T,31,{'tansig','purelin'},'trainlm');%新版用法
net.trainParam.epochs=1000;
net.trainParam.goal=0.00001;
net.trainParam.lr=0.01;
net.trainParam.showWindow=false;%阻止訓練窗口的彈出
net.trainParam.showCommandLine=false;%阻止訓練窗口的彈出
net=train(net,p,t);
Out=sim(net,p_test);
end
上面的代碼不完整,完整的帶訓練樣本數據的程序見附件。
D. 需要把MATLAB中的BP神經網路工具箱與自己的一個軟體項目結合
這個就是C++與matlab混合編程。但是神經網路工具箱比較特別,它反盜用比較嚴厲。採用回傳統的混答編方式,可以調用matlab自己的函數,但無法成功調用神經網路工具箱。這一點在mathwork網站上也做了說明。
以C#為例,一般混編有四種方式:
(1)利用Matlab自身編譯器,目的是將m文件轉換為c或c++的源代碼。
(2)利用COM或.NET組件技術。通過MATLAB中的Deploy tool工具將m文件編譯成dll,然後在系統中調用。
(3)利用Mideva平台。沒嘗試過。
(4)利用MATLAB引擎技術。該方法相當於在.NET中運行MATLAB程序,獲取其結果。優點是操作簡單,過程簡易。缺點是需要安裝Matlab軟體。
如果要調用神經網路工具箱,只有使用第四種方法,即引擎技術,其他方法都不可行。這種混編方式僅僅傳遞參數,因此不涉及到神經網路工具箱的代碼,也就沒有了防盜用限制。
E. 用matlab的nntool工具箱訓練好的一個BP神經網路,下一步要怎麼做才能進行數據輸入得到相應的輸出結果
a=sim(net,x)
說實話我也菜鳥級別,你看一下最後這個函數能不能用:
其中「a」自己隨便可以設的,其實就是個代表返回值
「net」換成你訓練好的函數,
「x」換成你的輸入矩陣
F. 一個關於BP神經網路的問題,matlab中神經網路工具箱的初始權值和閥值是
訓練BP神經網路所採取的隨機初始參數確實是隨機的,在訓練過程中這些參數和權值都會朝著同一個大方向進行修正。例如你用BP神經網路來擬合曲線,找到輸入值與輸出值之間的線性規律,那麼在訓練的過程中這個擬合的曲線會不斷的調整其參數和權值直到滿足幾個預設條件之一時訓練停止。雖然這個訓練出來的結果有時候會有一定誤差,但都在可以接受的范圍內。
縮小誤差的一個方法是需要預先設置初始參數,雖然每次依然會得到不一樣的模型(只要參數是隨機修正的),但不同模型之間的差距會很小。另外可以反復訓練,找到一個自己覺得滿意的模型(可以是測試通過率最高,可以是平均結果誤差值最小)。
至於你說別人怎麼檢查你的論文結果,基本上都是通過你的演算法來重建模型,而且還不一定都用matlab來做,即便是用同樣的代碼都會出現不同的結果,何況是不同的語言呢?其實驗算結果最重要的是看測試時的通過率,例如在對一組新的數據進行測試(或預測)時,通過率達到95%,別人用其他的方式重建了你的模型也得到這樣的通過率,那麼你的演算法就是可行的。注意,在計算機專業的論文裡面大家看重的不是代碼,而是演算法。
補充一點:只要你訓練好了一個神經網路可以把這個神經網路以struct形式保存,這樣這個網路可以被反復使用,且每次對同一組測試數據的預測結果都會一樣。你也可以當做是檢測論文可行性的工具。