【神经网络模型及其MATLAB仿真程序设计】书上的数字识别问题,紧急求助!
是采用BP神经网络来识别我照着书把例子敲了一遍,但是训练的时候就是达不到要求的net.trainParam.goal=0.001;
肯定是哪个地方出问题了!
谁来帮帮我啊?谢谢了!!!
源程序过会我发上来。
.
.
.
TRAINGDX, Epoch 1600/2500, MSE 1.05612/0.001, Gradient 0.238026/1e-006
TRAINGDX, Epoch 1610/2500, MSE 1.0558/0.001, Gradient 0.155097/1e-006
TRAINGDX, Epoch 1620/2500, MSE 1.05558/0.001, Gradient 0.0536577/1e-006
TRAINGDX, Epoch 1630/2500, MSE 1.05556/0.001, Gradient 0.00640511/1e-006
TRAINGDX, Epoch 1640/2500, MSE 1.05556/0.001, Gradient 0.00241312/1e-006
TRAINGDX, Epoch 1650/2500, MSE 1.05556/0.001, Gradient 0.0123226/1e-006
TRAINGDX, Epoch 1660/2500, MSE 1.05556/0.001, Gradient 0.00370979/1e-006
TRAINGDX, Epoch 1661/2500, MSE 1.05556/0.001, Gradient 0.00405827/1e-006
TRAINGDX, User stop. 生成目标向量
%Generate_InputP_TargetT
clear all;
'正在生成输入向量和目标向量,请稍等……'
for kk=0:89
p1=ones(16,16); %初始化16*16的二值图像像素值(全白)
m=strcat(int2str(kk),'.bmp'); %形成训练样本图像的文件名(0--89.bmp)
x=imread(m,'bmp'); %读入训练样本图像文件
bw=im2bw(x,0.5); %将读入的训练样本图像转换为二值图像
%%图像处理函数详解——im2bw
%%功能:通过设定亮度将阈值灰度、真彩、索引图像转换为二值图像。
=find(bw==0); %寻找二值图像中像素值为0(黑)的行号和列号
imin=min(i); %寻找二值图像中像素值为0(黑)的最小行号
imax=max(i); %寻找二值图像中像素值为0(黑)的最大行号
jmin=min(j); %寻找二值图像中像素值为0(黑)的最小列号
jmax=max(j); %寻找二值图像中像素值为0(黑)的最大列号
bw1=bw(imin:imax,jmin:jmax); %截取图像像素值为0(黑)的最大矩形区域
rate=16/max(size(bw1)); %计算截取图像转换为16*16的二值图像的缩放比例
bw1=imresize(bw1,rate); %将截取图像转换为16*16的二值图像(由于缩放比例
%大多数情况下不为16的倍数,所以可能存在转换误差)
=size(bw1); %转换图像的大小
i1=round((16-i)/2); %计算转换图像与标准16*16的图像的左边界差
j1=round((16-j)/2); %计算转换图像与标准16*16的图像的上边界差
p1(i1+1:i1+i,j1+1:j1+j)=bw1; %将截取图像转换为标准的16*16的图像
p1= -1. *p1 + ones(16,16); %反色处理
%以图像数据形成神经网络输入向量
for m=0:15
p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1);
end
%形成神经网络目标向量
switch kk
case{0,10,20,30,40,50,60,70,80,90} %数字0
t(kk+1)=0;
case{1,11,21,31,41,51,61,71,81,91} %数字1
t(kk+1)=1;
case{2,12,22,32,42,52,62,72,82,92} %数字2
t(kk+1)=2;
case{3,13,32,33,43,53,63,73,83,93} %数字3
t(kk+1)=3;
case{4,14,24,34,44,54,64,74,84,94} %数字4
t(kk+1)=4;
case{5,15,25,35,45,55,66,75,85,95} %数字5
t(kk+1)=5;
case{6,16,26,36,46,56,66,76,86,96} %数字6
t(kk+1)=6;
case{7,17,27,37,47,57,67,77,87,97} %数字7
t(kk+1)=7;
case{8,18,28,38,48,58,68,78,88,98} %数字8
t(kk+1)=8;
case{9,19,29,39,49,59,69,79,89,99} %数字9
t(kk+1)=9;
end
end
save E52PT p t; %存储形成的训练样本集(输入向量和目标向量)
'输入向量和目标向量生成结束!' %Create_Train_BPNetwork
%构建BP神经网络,并根据训练样本形成的输入矢量和目标矢量,对BP网络进行训练
clear all;
load E52PT p t; %加载训练样本集(输入向量和目标向量)
%创建BP网络
pr(1:256,1)=0;
pr(1:256,2)=1;
net=newff(pr,,{'logsig' 'purelin'},'traingdx','learngdm');
%设置训练参数和训练BP网络
net.trainParam.epochs=2500;
net.trainParam.goal=0.001;
net.trainParam.show=10;
net.trainParam.lr=0.05;
net=train(net,p,t);
%存储训练后的BP网络
save E52net net; %Simulate_BPNetwork
%对BP网络进行仿真,以形成训练样本的方法,形成测试样本原始图像,
%存于不同的‘bmp’文件中,用于测试。
clear all;
p(1:256,1)=1;
p1=ones(16,16); %初始化16*16的二值图像像素值(全白)
load E52net net; %加载训练后的BP网络
test=input('Please input a test image:','s'); %提示输入测试样本图像文件名
x=imread(test,'bmp'); %读入测试样本图像
bw=im2bw(x,0.5); %将读入的训练样本图像转换为二值图像
=find(bw==0);%寻找二值图像中像素值为0的行号和列号
imin=min(i); %寻找二值图像中像素值为0的最小行号
imax=max(i); %寻找二值图像中像素值为0的最大行号
jmin=min(j); %寻找二值图像中像素值为0的最小列号
jmax=max(j); %寻找二值图像中像素值为0的最大列号
bw1=bw(imin:imax,jmin:jmax); %截取图像像素值为0的最大矩形区域
rate=16/max(size(bw1)); %计算转换为16*16的二值图像的缩放比例
bw1=imresize(bw1,rate); %将截取图像转换为16*16的二值图像
=size(bw1); %转换图像的大小
i1=round((16-i)/2); %计算转换图像的宽度与16的差距
j1=round((16-j)/2); %计算转换图像的高度与16的差距
p1(i1+1:i1+i,j1+1:j1+j)=bw1; %将截取图像转换为标准的16*16的图像
p1=-1.*p1+ones(16,16);%反色处理
for m=0:15
p(m*16+1:(m+1)*16,1)=p1(1:16,m+1);%形成测试样本输入向量
end
= sim(net,p); %网络仿真
imshow(p1); %显示测试样本图像
a=round(a)%输出识别结果 就是训练老是出问题,为什么啊?麻烦你们看看,救救小女子吧!
见截图:
同学,那个bmp文件怎么做的,有现成的没,谢谢. 这是什么书,这么牛,我在坐这个毕设,能给我发一份不
页:
[1]