clc
clear all
close all
I=8; Number of input neurons
J=15; Number of hidden neurons
K=3; Number of output neurons
Nu=0.001; Learning rate
NP=125; Number of patternes
stop_criteria=0.0001;
Generate patterens OR Gate
G(1,:)=[0 0];
G(2,:)=[0 1];
G(3,:)=[1 0];
G(4,:)=[1 1];
ODis(1,1)=0;
ODis(2,1)=1;
ODis(3,1)=1;
ODis(4,1)=1;
initialize random weights
Input layer
for j=1:J
for i=1:I
VH(j,i)=rand*2-1;
end
Vb(j)=rand*2-1;
end
Hidden layer
for k=1:K
for j=1:J
W(k,j)=rand*2-1;
end
Wb(k)=rand*2-1;
end
eta=0; the eteration counter
E=100; high error to enter the while loop
while(E>stop_criteria)
eta=eta+1;
dW=zeros(K,J); set the change of weights to zero because it is summation
dWb=zeros(K);
dVH=zeros(J,I);
dVb=zeros(J);
E=0;
patterns counter
for n=1:NP
Forward phase
Hidden layer
for j=1:J
netj(j)=0;
for i=1:I
netj(j)=netj(j)+VH(j,i)*G(n,i);
end
netj(j)=netj(j)+Vb(j);
h(j)=H(netj(j));
end
Output Layer
for k=1:K
netk(k)=0;
for j=1:J
netk(k)=netk(k)+W(k,j)*h(j);
end
netk(k)=netk(k)+Wb(k);
O(k)=netk(k);
e(k)=ODis(n,k)-O(k);
E=E+e(k)^2;
end
Backward Phase
upadting the output layer weights
for k=1:K
for j=1:J
dW(k,j)=dW(k,j)+Nu*e(k)*h(j);
end
dWb(k)=dWb(k)+Nu*e(k);
end
upadting the hidden layer weights
for j=1:J
delta=0;
for k=1:K
delta=delta+e(k)*W(k,j);
end
for i=1:I
dVH(j,i)=dVH(j,i)+Nu*Hd(netj(j))*G(n,i)*delta;
end
dVb(j)=dVb(j)+Nu*Hd(netj(j))*delta;
end
end ending the Patterns loop
for k=1:K
for j=1:J
W(k,j)=W(k,j)+dW(k,j);
end
Wb(k)=Wb(k)+dWb(k);
end
for j=1:J
for i=1:I
VH(j,i)=VH(j,i)+dVH(j,i);
end
Vb(j)=Vb(j)+dVb(j);
end
E=E/2;
figure(1);
MSE(eta)=E;
plot(MSE);
title(['MSE=' num2str(E)])
xlabel('epoch')
ylabel('MSE')
drawnow
E
end end of while loop
for n=1:NP
for j=1:J
netj(j)=0;
for i=1:I
netj(j)=netj(j)+VH(j,i)*G(n,i);
end
netj(j)=netj(j)+Vb(j);
h(j)=H(netj(j));
end
Output Layer
for k=1:K
netk(k)=0;
for j=1:J
netk(k)=netk(k)+W(k,j)*h(j);
end
netk(k)=netk(k)+Wb(k);
O(k)=netk(k);
e(k)=ODis(n,k)-O(k);
E=E+e(k)^2;
ODis2(n,k)=ODis(n,k);
O2(n,k)=O(k);
end
end
figure(2)
plot(ODis2,'b')
hold on
plot(O2,'r')
title('Comparison')
xlabel('Pattern')
ylabel('Output')
legend('Desired','Actual')