上一遍寫到了,公式,或者是一下關於bp神經網路的內容的語言描述。下面就要開始,進行深度點的分析。
clcclear
%p=-1:0.1:1;
%t=[-0.96 -0.577 -0.0729 0.377 0.641 0.66 0.461 0.1336 -0.201 -0.434 -0.5 -0.393 -0.1647 0.0988 0.3072...
% 0.396 0.3449 0.1816 -0.0312 -0.2183 -0.3201];
p=linspace(0.5,0.6,21); % 前兩個是起始,最後是份數。
x1=0:pi/40:0.5*pi;
t=0.99*sin(x1);
%plot (p,t,'r+');
%for w=1:10
net = newff (minmax(p),[4,1],,'traingdx');
%net = newff (minmax(p),[1,4,1],,'traingdx'); %雙隱層結構
%net = newcf (minmax(p),[1,5,1],,'traingdx');
%newcf這個效能更好。建立的神經網路不一樣。
net.trainparam.epochs=20000;%訓練的最大次數
net.trainparam.goal=0.0002;%訓練的最小均方誤差
net.trainparam.lr=0.05;%學習率
[net,tr]=train(net,p,t);
y=sim(net,p);
plot(p,y,'r-')
hold
plot(p,t,'r+');
hold off;
%pause (1);
%figure;
%w=w+1;
%v1(1:4,w) = net.iw;%輸入層到中間層的權值
%b1(1:4,w) = net.b;%中間層的閾值
%w1(w,1:4) = net.lw;%中間層到輸出層的權值
%b2(w,1:4) = net.b;%輸出層的閾值
v1 = net.iw
b1 = net.b
w1 = net.lw
b2 = net.b
%end
%iw(1, j ) 表示第 j 個輸入向量在輸入層和隱含層中的權值。
%lw(2,1) :第 1 個輸入向量在隱含層和輸出層中的權值。。。。
這個是我在驗證過程中,使用的例子。這個例子是直接呼叫了,matlab的神經網路函式。通過這個例子,你可以更好的理解,神經網路。matlab自帶的神經網路函式很多。可以感受一下,不同的神經網路有什麼樣的不同。結合文字資料,體會的就更深入。
newcf
建立級聯前向網路
newff
建立前向bp
網路newffd
建立存在輸入延遲的前向網路
傳遞函式:
logsig s
型的對數函式
dlogsig logsig
的導函式
tansig s
型的正切函式
dtansig tansig
的導函式
purelin
純線性函式
dpurelin purelin
的導函式
學習函式:
learngd
基於梯度下降法的學習函式
learngdm
梯度下降動量學習函式
訓練函式:
trainbrbayes
規範化bp訓練函式
trainc
迴圈順序漸增訓練函式
traincgb powell-beale
連線梯度bp訓練函式
traincgf fletcher-powell
連線梯度bp訓練函式
traincgp polak-ribiere
連線梯度bp訓練函式
traingda
自適應lrbp的梯度遞減訓練函式
traingdx
動量及自適應lrbp
的梯度遞減訓練函式
trainlm levenberg-marquardt bp
訓練函式
trainoss
一步正切bp訓練函式
trainr
隨機順序遞增更新訓練函式
trainrp
帶**的bp訓練函式
trains
順序遞增bp訓練函式
trainscg 量化連線梯度bp訓練函式
效能函式:
mse
均方誤差函式
msereg
均方誤差規範化函式
顯示函式:
plotperf
繪製網路的效能
plotes
繪製乙個單獨神經元的誤差曲面
plotep
繪製權值和閾值在誤差曲面的位置
errsurf
計算單個神經元的誤差曲面
這裡是一些,對應的matlab函式。
有一些**表示,
從乙個**裡面,隱層節點數的估計是,
輸入節點數加上輸出節點數a是1—10之間。
目前我所查詢到的資料,這個是用的最普遍的。(但都是統計學而已。並沒有精確的理論推理和驗證)
對應這個結論,我做了一下的一些測試。(大部分用的都是上面的matlab程式)
這裡我就不一張一張的貼出來,我測試的內容了。
因為我做的測試很多。不好這麼麻煩的貼出來。
總結:中間層是5這個是newcf最好的情況。
中間層是4
這個是newff最好的情況。
但是如果中間層是21,或者是31的話,中間層愈多越快。10秒鐘就可以收斂。(和學習率有關,但是關係不大)
有**說,隱層多也會使收斂的時間長(目前測試不出來)
對應學習率的測試:
0.03是5363次。0.05是5006次。0.06是5559次。0.1是5908次(不同情況下,相同情況的迭代次數也不一樣)
0.04是5290次(第二次5849)。
還有很多都是貼圖的。就不在這裡貼出來了。因為這裡涉及到,隨機初始點的隨機性。也會影響結果。我記得我還測試了其他的資料。暫時找不到了。
關於隱層有幾層的問題,其他**的資料都是
3層最合適。就是說只有
1個隱層。但是少量的資料顯示
2個隱層也可以。輸入資料歸一化。
據查到是資料表示,bp神經網路是需要很多經驗性的東西。可是到目前為止,測試的情況來看,我還沒有分析到任何可靠的經驗。
也就沒有什麼所謂的經驗可以說了。
本人能力有限,但是我努力學的更好,分享的更多。只能做到這些了。我會繼續努力的。
FPGA 機器學習之BP神經網路2
來個小例子講述一下,過程。apf 是0.9 af是0.1 為什麼用0.9,用0.1 主要是因為1和0.在計算過程中,會有計算隱患 可能遇到0,就計算不下去等情況 a0 1 1.78 a0 2 1.14 也就是第一組資料。輸出a2 0.9 最後我們要進行多次的迭代和優化,優化的呢?就是w1,和w2.使...
FPGA機器學習之BP神經網路4
神經網路3,主要是一些用matlab自帶函式來完成神經網路的例子。matlab自帶的函式,都是經過優化,而且函式的實現過程是被封裝好了點。效能也是非常的優良了。可是自己寫出來的bp神經網路可能就不能達到那樣的效果。要想在fpga上實現,或者要知道內部的運 況,還是要自己寫才行。這個是自己寫的bp神經...
FPGA 機器學習之BP神經網路2
來個小例子講述一下,過程。apf 是0.9 af是0.1 為什麼用0.9,用0.1 主要是因為1和0.在計算過程中,會有計算隱患 可能遇到0,就計算不下去等情況 a0 1 1.78 a0 2 1.14 也就是第一組資料。輸出a2 0.9 最後我們要進行多次的迭代和優化,優化的呢?就是w1,和w2.使...