سلام
برنامه زیر کد شمارش تعداد انگشتان باز یک دست با استفاده از شبکه عصبی پرسپترون است
[code=matlab]
%% initializeing the program
clc;
clear all;
close all;
%%
n=16;

l0=imread('left0.jpg'
l0=rgb2gray(l0);
l0=im2bw(l0,0.5);

%%
l1=imread('left1.jpg'
l1=rgb2gray(l1);
l1=im2bw(l1,0.5);

%%
l2=imread('left2.jpg'
l2=rgb2gray(l2);
l2=im2bw(l2,0.5);

%%
l3=imread('left3.jpg'
l3=rgb2gray(l3);
l3=im2bw(l3,0.5);

%%
l4=imread('left4.jpg'
l4=rgb2gray(l4);
l4=im2bw(l4,0.5);

%%
l5=imread('left9.jpg'
l5=rgb2gray(l5);
l5=im2bw(l5,0.5);

%%
l44=imread('left8.jpg'
l44=rgb2gray(l44);
l44=im2bw(l44,0.5);

%%
l33=imread('left7.jpg'
l33=rgb2gray(l33);
l33=im2bw(l33,0.5);


%%
r0=imread('right0.jpg'
r0=rgb2gray(r0);
r0=im2bw(r0,0.5);

%%
r1=imread('right1.jpg'
r1=rgb2gray(r1);
r1=im2bw(r1,0.5);

%%
r2=imread('right2.jpg'
r2=rgb2gray(r2);
r2=im2bw(r2,0.5);

%%
r3=imread('right3.jpg'
r3=rgb2gray(r3);
r3=im2bw(r3,0.5);

%%
r4=imread('right4.jpg'
r4=rgb2gray(r4);
r4=im2bw(r4,0.5);

%%
r5=imread('right9.jpg'
r5=rgb2gray(r5);
r5=im2bw(r5,0.5);

%%
r11=imread('right5.jpg'
r11=rgb2gray(r11);
r11=im2bw(r11,0.5);

%%
r22=imread('right6.jpg'
r22=rgb2gray(r22);
r22=im2bw(r22,0.5);
%%
r33=imread('right7.jpg'
r33=rgb2gray(r33);
r33=im2bw(r33,0.5);

%%
r44=imread('right8.jpg'
r44=rgb2gray(r44);
r44=im2bw(r44,0.5);




subplot(2,6,1);
imshow(l0);
subplot(2,6,2);
imshow(l1);
subplot(2,6,3);
imshow(l2);
subplot(2,6,4);
imshow(l3);
subplot(2,6,5);
imshow(l4);
subplot(2,6,6);
imshow(l5);



subplot(2,6,7);
imshow(r0);
subplot(2,6,8);
imshow(r1);
subplot(2,6,9);
imshow(r2);
subplot(2,6,10);
imshow(r3);
subplot(2,6,11);
imshow(r4);
subplot(2,6,12);
imshow(r5);

figure;

% x[n,10000]
x=[reshape(l0,1,[]);reshape(l1,1,[]);reshape(l2,1,[]);reshape(l3,1,[]);reshape(l4,1,[]);reshape(l5,1,[]);
reshape(r0,1,[]);reshape(r1,1,[]);reshape(r2,1,[]);reshape(r3,1,[]);reshape(r4,1,[]);reshape(r5,1,[]);
reshape(r11,1,[]);reshape(r22,1,[]);reshape(r33,1,[]);reshape(r44,1,[]);
];


% t[n,6]
t=[1 -1 -1 -1 -1 -1;
-1 1 -1 -1 -1 -1;
-1 -1 1 -1 -1 -1;
-1 -1 -1 1 -1 -1;
-1 -1 -1 -1 1 -1;
-1 -1 -1 -1 -1 1;
1 -1 -1 -1 -1 -1;
-1 1 -1 -1 -1 -1;
-1 -1 1 -1 -1 -1;
-1 -1 -1 1 -1 -1;
-1 -1 -1 -1 1 -1;
-1 -1 -1 -1 -1 1;


-1 1 -1 -1 -1 -1;
-1 -1 1 -1 -1 -1;
-1 -1 -1 1 -1 -1;
-1 -1 -1 -1 1 -1;
];

%%

b=zeros(1,6);
b_old=zeros(1,6);

y_in=zeros(1,6);
y=zeros(1,6);
w=zeros(10000,6);
w_old=zeros(10000,6);
s=0;
epoch=0;
%%

while s==0
epoch=epoch+1;
for i=1:n
for k=1:6
y_in(k)=0;
for j=1 : 10000
y_in(k)=y_in(k)+ w(j,k)*x(i,j);
end
y_in(k)=y_in(k)+b(k);


if(y_in(k)>0)
y(k)=1;
elseif (y_in(k)<0)
y(k)=-1;
else
y(k)=0;
end

if(t(i,k)~=y(k))
for z=1:10000
w(z,k)=w(z,k)+x(i,z)*t(i,k);
end
b(k)=b(k)+t(i,k);
end
end

end
if ((w_old==w))
s=1;
else
w_old=w;
b_old=b;
end
end
%%

[fn,path]=uigetfile('*.jpg','select your hand to count its finger'
test=imread([path,fn]);
test=imresize(test,[100 100]);
test=rgb2gray(test);
test=im2bw(test,0.5);
test=reshape(test,1,[]);
% test
y=0;
%r=randi(20)+1

result=zeros(1,6);
for k=1:6
for i=1:10000

y=y+test(i)*w(i,k);

end
y=y+b(k);
if(y>=0)
result(k)=1;
else
result(k)=-1;
end
y=0;
end

disp(['Your Output array is : ']);
disp(result);

if result== [ 1 -1 -1 -1 -1 -1]
disp('<moch maste>'
imshow (l0);
elseif result== [ -1 1 -1 -1 -1 -1]
disp('1 finger'
imshow(l1);
elseif result==[-1 -1 1 -1 -1 -1]
disp('2 finger'
imshow(l2);

elseif result==[ -1 -1 -1 1 -1 -1]
disp('3 finger'
imshow(l3)
elseif result== [ -1 -1 -1 -1 1 -1]
disp('4 finger'
imshow(l4);
elseif result==[ -1 -1 -1 -1 -1 1 ]
disp('5 finger'
imshow(l9)
else
disp('Im sorry'
end
[/code]
میشه توضیح بیشتری بدید قسمتهای زیر از کد بالایی دقیقا چکار می کند.

مقادیر اولیه شبکه عصبی شامل y , b , w
[code=matlab]b=zeros(1,6);
b_old=zeros(1,6);

y_in=zeros(1,6);
y=zeros(1,6);
w=zeros(10000,6);
w_old=zeros(10000,6);
s=0;
epoch=0;[/code]

میشه توضیح بدین این حلقه دقیقا چطور کار می کند؟
در این حلقه هر کدام از تصاویر به شبکه عصبی آموزش داده می شود تازمانی که کامل یاد بگیرد
[code=matlab]while s==0
epoch=epoch+1;
for i=1:n
for k=1:6
y_in(k)=0;
for j=1 : 10000
y_in(k)=y_in(k)+ w(j,k)*x(i,j);
end
y_in(k)=y_in(k)+b(k);


if(y_in(k)>0)
y(k)=1;
elseif (y_in(k)<0)
y(k)=-1;
else
y(k)=0;
end

if(t(i,k)~=y(k))
for z=1:10000
w(z,k)=w(z,k)+x(i,z)*t(i,k);
end
b(k)=b(k)+t(i,k);
end
end

end
if ((w_old==w))
s=1;
else
w_old=w;
b_old=b;
end
end[/code]