神經網路Version2

2021-08-08 18:42:08 字數 2683 閱讀 9989

% 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...