% a demo to bp nerual network
format long
% define the sigmoid function
f = @(
x) 1/(1+exp(-x));
% enter the learning rate
eta = 0.5;
x=[0.05,0.10];
y=[0.01,0.99];
% modified
b=[1,1,1];
bw=[0.35,0.6,0.35];
temp = size(x);
% number of rows
m = temp(1);
% number of cols
n = temp(2);
% the weights
w=[0.15,0.20,0.25,0.30;
0.40,0.45,0.50,0.55;
0.40,0.45,0.50,0.55];
% gradient
gradient = zeros(3,4);
% the output of neurons in hidden layer
hout = zeros(2,2);
% the output of neurons in hidden layer
oout=[1;1];
% initialize the condition to terminate loop
diff = 1;
while(diff <= 1)
% 正向推理(輸入層->隱藏層1)
neth1=w(1,1)*x(1)+w(1,2)*x(2) + b(1)*bw(1);
hout(1,1) = f( neth1 );
hout(1,2) = f( w(1,3)*x(1)+w(1,4)*x(2) + b(1)*bw(1) );
%(隱藏層1->隱藏層2)
hout(2,1)=f( w(2,1)*hout(1,1)+w(2,2)*hout(1,2) + b(2)*bw(2) )
hout(2,2)=f( w(2,3)*hout(1,1)+w(2,4)*hout(1,2) + b(2)*bw(2) )
%(隱藏層2->輸出層)
oout(1)=f( w(3,1)*hout(2,1)+w(3,2)*hout(2,2) + b(3)*bw(3) );
oout(2)=f( w(3,3)*hout(2,1)+w(3,4)*hout(2,2) + b(3)*bw(3) );
% gradient of output layer
deltao=zeros(2,4);
deltao(1,4)=( oout(1) - y(1) ) * oout(1) * (1 - oout(1) );
deltao(2,4)=( oout(2) - y(2) ) * oout(2) * (1 - oout(2) );
%求輸出層到隱藏層2的偏導
gradient(3,1)=deltao(1,4)*hout(2,1);
gradient(3,2)=deltao(1,4)*hout(2,2);
gradient(3,3)=deltao(2,4)*hout(2,1);
gradient(3,4)=deltao(2,4)*hout(2,2);
%求deltao (3)
deltao(1,3) = ( deltao(1,4)*w(2,1) + deltao(2,4)*w(2,3) )*hout(2,1)*(
1-hout(2,1));
deltao(2,3) = ( deltao(2,4)*w(2,4) + deltao(1,4)*w(2,2) )*hout(2,2)*(
1-hout(2,2));
gradient(1,:);
%w(2,:)
%求隱藏層2到隱藏層1的偏導
gradient(2,1)= deltao(1,3) * hout(1,1);
gradient(2,2)= deltao(1,3) * hout(1,2);
gradient(2,3)= deltao(2,3) * hout(1,1);
gradient(2,4)= deltao(2,3) * hout(1,2);
%求deltao (2)
deltao(1,2) = ( deltao(1,4)*w(2,1) + deltao(2,4)*w(2,3) )*hout(1,1)*(
1-hout(1,1));
deltao(2,2) = ( deltao(2,4)*w(2,4) + deltao(1,4)*w(2,2) )*hout(1,2)*(
1-hout(1,2));
%求隱藏層1到輸入層的偏導
gradient(1,1)= deltao(1,2) * x(1);
gradient(1,2)= deltao(1,2) * x(2);
gradient(1,3)= deltao(2,2) * x(1);
gradient(1,4)= deltao(2,2) * x(2);
% gradient(1,:);
%進行梯度下降
w=w-eta*gradient
% update diff
diff=diff+1;
end
神經網路2
利用神經網路,採用合適的權重來實現邏輯電路中的與 或 非門等的實際計算 多個各種功能的神經元的疊加計算,有點類似agent的思想,將不同功能的單位組合起來實現同一目的 處理多種分類問題的模型,神經網路的優勢個人目前感覺就是我只需要收集簡單的資料資訊,神經網路自己進行挑選,計算,最終給出我們想要的結果...
神經網路 學習(2)
初始化,不能一開始全部全設成0,因為這樣的話,隱層結點就會變得全部一樣,體現不出神經網路多層多結點的優越性。咦 如果層數很多的話,超過三層,那麼有個潛規則就是中間的幾層的隱節點數一般都是一樣大小 隱節點數稍微大點輸入結點個數這個是極好的。下面就是幾個步驟 第一步,隨機化引數 第二步,前向得到乙個結果...
淺層神經網路 2
搭建乙個神經網路時,你可以選擇隱藏層中或者輸出層中使用什麼啟用函式 actuation function 到目前為止,我們一直使用的是sigmoid函式,但其他函式效果會更好。在實際訓練中,有個函式表現總是比sigmoid好,叫tanh 雙曲正切函式 它的輸出是 1,1 從數學上,它其實是sigmo...