matlab에서 bp신경 네트워크를 작성하여 핸드폰 디지털 식별(그림 및 코드 포함)
27997 단어 신경 네트워크
matlab에서 bp신경 네트워크를 작성하여 핸드폰 디지털 식별(그림 및 코드 포함)
본문 참고 링크https://blog.csdn.net/huang_miao_xin/article/details/51364152.그중의 일부 코드를 수정하여 완벽하게 운행할 수 있다.코드는 주로 다음과 같은 다섯 부분을 포함한다.
1. 신경 네트워크 초기화
V=double(rand(256,64));
W=double(rand(64,10));
delta_V=double(rand(256,64));
delta_W=double(rand(64,10));
% lf=0;
yita=0.2;% ,
yita1=0.05;% , ,
train_number=10;% , , 9 , 0
train_num=400;% , , 100
x=double(zeros(1,256));%
y=double(zeros(1,64));% ,
output=double(zeros(1,10));%
tar_output=double(zeros(1,10));% ,
delta=double(zeros(1,10));% ,
%
s_record=1:400;
2. 그림 읽기
tic %
for train_control_num=1:400 % , 1000 , 400
s=0;
% ,
for number=1:train_number %train_number=10
ReadDir=['D:\contrl\BP\BP\training\',num2str(number-1)];%
for num=1:train_num % train_num=30
photo_name=['\a (',num2str(num),').png'];%
photo_index=[ReadDir,photo_name];%
photo_matrix=imread(photo_index);% imread
photo_matrix=imresize(photo_matrix,[16,16]);
photo_matrix=uint8(photo_matrix>=30);% , 1
tmp=photo_matrix';
tmp=tmp(:);% ,256 , ,
3. 전방향 계산
%
x=double(tmp');% X ,
%
y0=x*V;
%
y=1./(1+exp(-y0*yita1));
%
output0=y*W;
% lf=lf+1;
output=1./(1+exp(-output0*yita1));
%
tar_output=double(zeros(1,10));
tar_output(number)=1.0;
4. 역방향 전파
%
% W V , for , ,
delta=(tar_output-output).*output.*(1-output);%1*10
delta_W=yita*repmat(y',1,10).*repmat(delta,64,1);%64*10
tmp=sum((W.*repmat(delta,64,1))');
tmp=tmp.*y.*(1-y);
delta_V=yita*repmat(x',1,64).*repmat(tmp,256,1);
%
s=s+sum((tar_output-output).*(tar_output-output))/10;
%
W=W+delta_W;
V=V+delta_V;
end
end
5. 드로잉, 상태 보기
s=s/train_number/train_num % ,
train_control_num % ,
s_record(train_control_num)=s;%
end
toc %
plot(1:400,s_record);
테스트
correct_num=0;%
incorrect_num=0;%
test_number=10;% , ,9 , 0
test_num=800;% , , 100
% load W;%% W ,
% load V;
% load yita1;
%
tic %
for number=1:test_number
number
ReadDir=['D:\contrl\BP\BP\training\',num2str(number-1)];
for num=1:test_num %
photo_name=['\a (',num2str(num),').png'];
photo_index=[ReadDir, photo_name];
photo_matrix=imread(photo_index);
%
photo_matrix=imresize(photo_matrix,[16 16]);
%
photo_matrix=uint8(photo_matrix>=30);% 1
%
tmp=photo_matrix';
tmp=tmp(:);
%
x=double(tmp');
%
y0=x*V;
%
y=1./(1+exp(-y0*yita1));
%
o0=y*W;
tar_output=double(zeros(1,10));
tar_output(number)=1.0;
o=1./(1+exp(-o0*yita1));
%
output=double(zeros(1,10));
[o,index]=sort(o);
p=index(10);
output(p)=1.0;
if p==number
correct_num=correct_num+1;
else
incorrect_num=incorrect_num+1;
% ,
% figure(incorrect_num)
% imshow((1-photo_matrix)*255);
% title(num2str(number));
end
end
end
plotconfusion(tar_output,output);
correct_rate=correct_num/test_number/test_num;
toc %
손으로 쓴 디지털 사진 자원이 csdn에 업로드되었습니다. 코드가 쉽지 않습니다. 포인트를 좀 주셨으면 좋겠습니다. 고맙습니다!!!https://download.csdn.net/download/qu_learner/12527007
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단한 BP 신경 네트워크 구현
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
V=double(rand(256,64));
W=double(rand(64,10));
delta_V=double(rand(256,64));
delta_W=double(rand(64,10));
% lf=0;
yita=0.2;% ,
yita1=0.05;% , ,
train_number=10;% , , 9 , 0
train_num=400;% , , 100
x=double(zeros(1,256));%
y=double(zeros(1,64));% ,
output=double(zeros(1,10));%
tar_output=double(zeros(1,10));% ,
delta=double(zeros(1,10));% ,
%
s_record=1:400;
tic %
for train_control_num=1:400 % , 1000 , 400
s=0;
% ,
for number=1:train_number %train_number=10
ReadDir=['D:\contrl\BP\BP\training\',num2str(number-1)];%
for num=1:train_num % train_num=30
photo_name=['\a (',num2str(num),').png'];%
photo_index=[ReadDir,photo_name];%
photo_matrix=imread(photo_index);% imread
photo_matrix=imresize(photo_matrix,[16,16]);
photo_matrix=uint8(photo_matrix>=30);% , 1
tmp=photo_matrix';
tmp=tmp(:);% ,256 , ,
%
x=double(tmp');% X ,
%
y0=x*V;
%
y=1./(1+exp(-y0*yita1));
%
output0=y*W;
% lf=lf+1;
output=1./(1+exp(-output0*yita1));
%
tar_output=double(zeros(1,10));
tar_output(number)=1.0;
%
% W V , for , ,
delta=(tar_output-output).*output.*(1-output);%1*10
delta_W=yita*repmat(y',1,10).*repmat(delta,64,1);%64*10
tmp=sum((W.*repmat(delta,64,1))');
tmp=tmp.*y.*(1-y);
delta_V=yita*repmat(x',1,64).*repmat(tmp,256,1);
%
s=s+sum((tar_output-output).*(tar_output-output))/10;
%
W=W+delta_W;
V=V+delta_V;
end
end
s=s/train_number/train_num % ,
train_control_num % ,
s_record(train_control_num)=s;%
end
toc %
plot(1:400,s_record);
correct_num=0;%
incorrect_num=0;%
test_number=10;% , ,9 , 0
test_num=800;% , , 100
% load W;%% W ,
% load V;
% load yita1;
%
tic %
for number=1:test_number
number
ReadDir=['D:\contrl\BP\BP\training\',num2str(number-1)];
for num=1:test_num %
photo_name=['\a (',num2str(num),').png'];
photo_index=[ReadDir, photo_name];
photo_matrix=imread(photo_index);
%
photo_matrix=imresize(photo_matrix,[16 16]);
%
photo_matrix=uint8(photo_matrix>=30);% 1
%
tmp=photo_matrix';
tmp=tmp(:);
%
x=double(tmp');
%
y0=x*V;
%
y=1./(1+exp(-y0*yita1));
%
o0=y*W;
tar_output=double(zeros(1,10));
tar_output(number)=1.0;
o=1./(1+exp(-o0*yita1));
%
output=double(zeros(1,10));
[o,index]=sort(o);
p=index(10);
output(p)=1.0;
if p==number
correct_num=correct_num+1;
else
incorrect_num=incorrect_num+1;
% ,
% figure(incorrect_num)
% imshow((1-photo_matrix)*255);
% title(num2str(number));
end
end
end
plotconfusion(tar_output,output);
correct_rate=correct_num/test_number/test_num;
toc %
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단한 BP 신경 네트워크 구현텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.