Neural network -matlab implement
function sigmoid = sigmoid(var)
sigmoid = 2/(1+exp(-var)) - 1;
end
function dsigmoid = dsigmoid(var)
dsigmoid = 0.5 * (1 + sigmoid(var)) * (1 - sigmoid(var));
end
[x,y,t] = textread(’hw3data.txt’,'%f %f %f’);
m=1;n=1;
for i =1 : length(t)
if t(i) == 1
x1(m) = x(i);
y1(m) = y(i);
m = m + 1;
else
x2(n) = x(i);
y2(n) = y(i);
n = n + 1;
end
end
P1 = 5;
P2 = 5;
U = rand(3,5);
V = rand(6,5);
W = rand(6,1);
dU = rand(3,5);
dV = rand(6,5);
dW = rand(6,1);
alpha = 0.4;
epach = 0;
i = 1;
max=10000;
while(i<max) && stopping_cond < 30
E(i) = 0;
epach = epach + 1;
for i = 1 : 600
%feed forward: set p1=5 p2=5
for j1 = 1 : P1
z_in(j1) = sum(x(i)*U(i))
z(j1) = 2/(1+exp(-z_in(j1))) - 1;
for j2 = 1 : P2
zz_in(j2) = sum(z(j1)* V(j1,j2));
%when should I add ";" after finishing a line
zz(j2) = 2/(1 + exp(- z_in(j2)) - 1;
y_in = sum(zz(j2)*W(j2,1));
y = 2/(1 + exp(- y_in)) - 1;
end
end
%error
E(i) = E(i) + (t(i) - y(i))^2;
stopping_cond=E(i);
%—————-BP
%1. set up delta
for k = 1 : 600
delta(k) = (t(k)-y(k)) * dsigmoid(y_in(k));
k = k + 1;
end
dW(0,1) = alpha * delta(0);
for j2 = 1 : P2
dW(j2,1) = alpha * delta(zz(j2));
delta(zz_in(j2))= delta(j2)*W(j2,1);
%???delta(zz(j2)) or delta(j2)
delta(zz(j2))=delta(zz_in(j2))*dsigmoid(zz_in(j2));
dV(0,j2)=alpha*delta(zz(j2))
for j1 = 1 : P1
dV(j1,j2)=alpha*delta(zz(j2))*z(j1);
end
end
%——
for j1=1:P1
for j2=1:P2
delta(z_in(j1))=delta(z_in(j1))+delta(zz(j2))*V(j1,j2);
end
delta(z(j1))=delta(z_in(j1))*dsigmoid(z_in(j1));
dU(0,j1)=alpha*delta(z(j1));
dU(i,j1)=alpha*delta(z(j1))*x(i);
end
%—update weight and bias:U = U + DU;…
for j1=1:P1
for j2=1:P2
W(j2,1)=W(j2,1)+dW(j2,1);
V(j1,j2)=V(j1,j2)+dV(j1,j2);
end
U(i,j1)=U(i,j1)+dU(i,j1);
end
U
V
W
end
i = i + 1;
end
scatter(x1,y1,’+b’)
hold on
scatter(x2,y2,’+r’)
axis([-0.5,1.5,-0.5,1.5])
x = -0.5 : 0.005 : 1.5
y = -0.5 : 0.005 : 1.5
[ X, Y ] = meshgrid(x, y);
%how to make the following?
%newx = [x’ size(y)];
%newy = [y’ size(y)];
k = 1;
for i = 1 : 401
for j = 1 : 401
newx(k) = X(i,j);
newy(k) = Y(i,j);
k = k + 1;
end
end
for i= 1 : length(newx)
%feed forward: set p1=5 p2=5
for j1 = 1 : P1
z_in(j1) = sum(x(i)*U(i))
z(j1) = 2/(1+exp(-z_in(j1))) - 1;
for j2 = 1 : P2
z_in(j2) = sum(z(j1)* V(j1,j2));
%when should I add ";" after finishing a line
zz(j2) = 2/(1 + exp(- z_in(j2)) - 1;
y_in = sum(zz(j2)*W(j2,1));
y(i) = 2/(1 + exp(- y_in(i))) - 1;
end
end
end
Z = y;
contour(newx,newy,Z)
hold off
legend(’data +1′, ‘data -1′)
title(’HW3:NN’)
