A. r語言中 怎樣輸出newff函數的BP神經網路訓練結果
你在建立網路的時候不是用了net=newff(……)嗎?這個net就是輸出的結果。
newff函數只是初始化一個神經網路,之後還得用train函數訓練,訓練好的net就是你要的網路。
newff函數的格式為:
net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函數newff建立一個可訓練的前饋網路。輸入參數說明:
PR:Rx2的矩陣以定義R個輸入向量的最小值和最大值;
Si:第i層神經元個數;
TFi:第i層的傳遞函數,默認函數為tansig函數;
BTF:訓練函數,默認函數為trainlm函數;
BLF:權值/閥值學習函數,默認函數為learngdm函數;
PF:性能函數,默認函數為mse函數。
B. BP神經網路matlab編程問題,給出11個輸入數據和2個輸出數據,進行訓練的程序。要求能運行並出相應的結果
給你一個我的程序,如果自己做不了可以聯系我:1526208341
動量梯度下降演算法訓練 BP 網路
訓練樣本定義如下:
輸入矢量為
p =[-1 -2 3 1
-1 1 5 -3]
目標矢量為 t = [-1 -1 1 1]
close all
clear
echo on
clc
% NEWFF——生成一個新的前向神經網路
% TRAIN——對 BP 神經網路進行訓練
% SIM——對 BP 神經網路進行模擬
pause
% 敲任意鍵開始
clc
% 定義訓練樣本
% P 為輸入矢量
P=[-1, -2, 3, 1; -1, 1, 5, -3];
% T 為目標矢量
T=[-1, -1, 1, 1];
pause;
clc
% 創建一個新的前向神經網路
net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')
% 當前輸入層權值和閾值
inputWeights=net.IW{1,1}
inputbias=net.b{1}
% 當前網路層權值和閾值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
pause
clc
% 設置訓練參數
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
pause
clc
% 調用 TRAINGDM 演算法訓練 BP 網路
[net,tr]=train(net,P,T);
pause
clc
% 對 BP 網路進行模擬
A = sim(net,P)
% 計算模擬誤差
E = T - A
MSE=mse(E)
pause
clc
echo off
C. matlab神經網路工具箱訓練出來的函數,怎麼輸出得到函數代碼段
這樣:
clear;
%輸入數據矩陣
p1=zeros(1,1000);
p2=zeros(1,1000);
%填充數據
for i=1:1000
p1(i)=rand;
p2(i)=rand;
end
%輸入層有兩個,樣本數為1000
p=[p1;p2];
%目標(輸出)數據矩陣,待擬合的關系為簡單的三角函數
t = cos(pi*p1)+sin(pi*p2);
%對訓練集中的輸入數據矩陣和目標數據矩陣進行歸一化處理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);
%建立BP神經網路
net = newff(pn, tn, [200,10]);
%每10輪回顯示一次結果
net.trainParam.show = 10;
%最大訓練次數
net.trainParam.epochs = 5000;
%網路的學習速率
net.trainParam.lr = 0.05;
%訓練網路所要達到的目標誤差
net.trainParam.goal = 10^(-8);
%網路誤差如果連續6次迭代都沒變化,則matlab會默認終止訓練。為了讓程序繼續運行,用以下命令取消這條設置
net.divideFcn = '';
%開始訓練網路
net = train(net, pn, tn);
%訓練完網路後要求網路的權值w和閾值b
%獲取網路權值、閾值
netiw = net.iw;
netlw = net.lw;
netb = net.b;
w1 = net.iw{1,1}; %輸入層到隱層1的權值
b1 = net.b{1} ; %輸入層到隱層1的閾值
w2 = net.lw{2,1}; %隱層1到隱層2的權值
b2 = net.b{2} ; %隱層1到隱層2的閾值
w3 = net.lw{3,2}; %隱層2到輸出層的權值
b3 = net.b{3} ;%隱層2到輸出層的閾值
%在默認的訓練函數下,擬合公式為,y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
%用公式計算測試數據[x1;x2]的輸出,輸入要歸一化,輸出反歸一化
in = mapminmax('apply',[x1;x2],inputStr);
y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
y1=mapminmax('reverse',y,outputStr);
%用bp神經網路驗證計算結果
out = sim(net,in);
out1=mapminmax('reverse',out,outputStr);
注意事項
一、訓練函數
1、traingd
Name:Gradient descent backpropagation (梯度下降反向傳播演算法 )
Description:triangd is a network training function that updates weight and bias values according to gradient descent.
2、traingda
Name:Gradient descentwith adaptive learning rate backpropagation(自適應學習率的t梯度下降反向傳播演算法)
Description:triangd is a network training function that updates weight and bias values according to gradient descent with adaptive learning rate.it will return a trained net (net) and the trianing record (tr).
3、traingdx (newelm函數默認的訓練函數)
name:Gradient descent with momentum and adaptive learning rate backpropagation(帶動量的梯度下降的自適應學習率的反向傳播演算法)
Description:triangdx is a network training function that updates weight and bias values according to gradient descent momentumand an adaptive learning rate.it will return a trained net (net) and the trianing record (tr).
4、trainlm
Name:Levenberg-Marquardtbackpropagation(L-M反向傳播演算法)
Description:triangd is a network training function that updates weight and bias values according toLevenberg-Marquardt optimization.it will return a trained net (net) and the trianing record (tr).
註:更多的訓練演算法請用matlab的help命令查看。
二、學習函數
1、learngd
Name:Gradient descent weight and bias learning function(梯度下降的權值和閾值學習函數)
Description:learngd is the gradient descentweight and bias learning function, it willreturn theweight change dWand a new learning state.
2、learngdm
Name:Gradient descentwith momentumweight and bias learning function(帶動量的梯度下降的權值和閾值學習函數)
Description:learngd is the gradient descentwith momentumweight and bias learning function, it willreturn the weight change dW and a new learning state.
註:更多的學習函數用matlab的help命令查看。
三、訓練函數與學習函數的區別
函數的輸出是權值和閾值的增量,訓練函數的輸出是訓練好的網路和訓練記錄,在訓練過程中訓練函數不斷調用學習函數修正權值和閾值,通過檢測設定的訓練步數或性能函數計算出的誤差小於設定誤差,來結束訓練。
或者這么說:訓練函數是全局調整權值和閾值,考慮的是整體誤差的最小。學習函數是局部調整權值和閾值,考慮的是單個神經元誤差的最小。
它的基本思想是學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。
正向傳播時,輸入樣本從輸入層傳入,經各隱層逐層處理後,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號)不符,則轉入誤差的反向傳播階段。
反向傳播時,將輸出以某種形式通過隱層向輸入層逐層反傳,並將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各單元權值的依據。
D. matlab神經網路問題 如何對指定的data輸出結果
好久沒做神經網路了
net.trainParam.epochs=5應該是對整組數據重復訓練5次
訓練好了用命令outputn=sim(net,inputn);用一組數據inputn驗證輸出outputn,實驗前最好對輸入數據進行歸一化操作,得到outputn後再反歸一化得到最終結果,歸一化函數為mapminmax
E. matlab bp神經網路怎麼寫
從原理上來說,神經網路是可以預測未來的點的。
實際上,經過訓練之後,神經網路就擬合了輸入和輸出數據之間的函數關系。只要訓練的足夠好,那麼這個擬合的關系就會足夠准確,從而能夠預測在其他的輸入情況下,會有什麼樣的輸出。
如果要預測t=[6 7]兩點的R值,先以t=[1 2 3 4 5]作為輸入,R=[12 13 14 14 15]作為輸出,訓練網路。訓練完成之後,用t=[2 3 4 5 6]作為輸入,這樣會得到一個輸出。不出意外的話,輸出的數組應該是[13 14 14 15 X],這里的X就是預測t=6時的R值。然後以t=[3 4 5 6 7]作為輸入,同理得到t=7時候的R值。
根據我的神經網路預測,t=6時,R=15,t=7時,R=15。我不知道這個結果是否正確,因為神經網路通常需要大量的數據來訓練,而這里給的數據似乎太少,可能不足以擬合出正確的函數。
F. 深度神經網路是如何訓練的
Coursera的Ng機器學習,UFLDL都看過。沒記錯的話Ng的機器學習里是直接給出公式了,雖然你可能知道如何求解,但是即使不知道完成作業也不是問題,只要照著公式寫就行。反正我當時看的時候心裡並沒能比較清楚的明白。我覺得想了解深度學習UFLDL教程 - Ufldl是不錯的。有習題,做完的話確實會對深度學習有更加深刻的理解,但是總還不是很清晰。後來看了Li FeiFei的Stanford University CS231n: Convolutional Neural Networks for Visual Recognition,我的感覺是對CNN的理解有了很大的提升。沉下心來推推公式,多思考,明白了反向傳播本質上是鏈式法則(雖然之前也知道,但是當時還是理解的迷迷糊糊的)。所有的梯度其實都是對最終的loss進行求導得到的,也就是標量對矩陣or向量的求導。當然同時也學到了許多其他的關於cnn的。並且建議你不僅要完成練習,最好能自己也寫一個cnn,這個過程可能會讓你學習到許多更加細節和可能忽略的東西。這樣的網路可以使用中間層構建出多層的抽象,正如我們在布爾線路中做的那樣。例如,如果我們在進行視覺模式識別,那麼在第一層的神經元可能學會識別邊,在第二層的神經元可以在邊的基礎上學會識別出更加復雜的形狀,例如三角形或者矩形。第三層將能夠識別更加復雜的形狀。依此類推。這些多層的抽象看起來能夠賦予深度網路一種學習解決復雜模式識別問題的能力。然後,正如線路的示例中看到的那樣,存在著理論上的研究結果告訴我們深度網路在本質上比淺層網路更加強大。
G. 如何得到神經網路預測結果
如果你用9——11年的數據不經過預測12——19年的數據就想得到第20年的數據的做法是不合理的,神經網路的預測講求時間序列的連續性,你可以在編寫maltab程序的時候才用遞歸的方法調用神經網路工具箱,加上對預測數據進行一定的格式操作就可以了,這樣你想讀到第幾年的數據都行。
H. 如何訓練神經網路
1、先別著急寫代碼
訓練神經網路前,別管代碼,先從預處理數據集開始。我們先花幾個小時的時間,了解數據的分布並找出其中的規律。
Andrej有一次在整理數據時發現了重復的樣本,還有一次發現了圖像和標簽中的錯誤。所以先看一眼數據能避免我們走很多彎路。
由於神經網路實際上是數據集的壓縮版本,因此您將能夠查看網路(錯誤)預測並了解它們的來源。如果你的網路給你的預測看起來與你在數據中看到的內容不一致,那麼就會有所收獲。
一旦從數據中發現規律,可以編寫一些代碼對他們進行搜索、過濾、排序。把數據可視化能幫助我們發現異常值,而異常值總能揭示數據的質量或預處理中的一些錯誤。
2、設置端到端的訓練評估框架
處理完數據集,接下來就能開始訓練模型了嗎?並不能!下一步是建立一個完整的訓練+評估框架。
在這個階段,我們選擇一個簡單又不至於搞砸的模型,比如線性分類器、CNN,可視化損失。獲得准確度等衡量模型的標准,用模型進行預測。
這個階段的技巧有:
· 固定隨機種子
使用固定的隨機種子,來保證運行代碼兩次都獲得相同的結果,消除差異因素。
· 簡單化
在此階段不要有任何幻想,不要擴增數據。擴增數據後面會用到,但是在這里不要使用,現在引入只會導致錯誤。
· 在評估中添加有效數字
在繪制測試集損失時,對整個測試集進行評估,不要只繪制批次測試損失圖像,然後用Tensorboard對它們進行平滑處理。
· 在初始階段驗證損失函數
驗證函數是否從正確的損失值開始。例如,如果正確初始化最後一層,則應在softmax初始化時測量-log(1/n_classes)。
· 初始化
正確初始化最後一層的權重。如果回歸一些平均值為50的值,則將最終偏差初始化為50。如果有一個比例為1:10的不平衡數據集,請設置對數的偏差,使網路預測概率在初始化時為0.1。正確設置這些可以加速模型的收斂。
· 人類基線
監控除人為可解釋和可檢查的損失之外的指標。盡可能評估人的准確性並與之進行比較。或者對測試數據進行兩次注釋,並且對於每個示例,將一個注釋視為預測,將第二個注釋視為事實。
· 設置一個獨立於輸入的基線
最簡單的方法是將所有輸入設置為零,看看模型是否學會從輸入中提取任何信息。
· 過擬合一個batch
增加了模型的容量並驗證我們可以達到的最低損失。
· 驗證減少訓練損失
嘗試稍微增加數據容量。
I. 訓練完成的神經網路如何寫成函數形式
可以 查看你使用的函數是tansig還是什麼,然後help找到函數關系式。代入訓練後的權重閾值即可
J. 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}就是輸出層和隱含層之間的權值。