FPGA 機器學習之BP神經網路3

2022-08-03 09:39:11 字數 3531 閱讀 8685

上一遍寫到了,公式,或者是一下關於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.使...