skater_girl 发表于 2009-5-4 19:34

【神经网络模型及其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.

skater_girl 发表于 2009-5-4 19:40

生成目标向量

%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;   %存储形成的训练样本集(输入向量和目标向量)
'输入向量和目标向量生成结束!'

skater_girl 发表于 2009-5-4 19:41

%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;

skater_girl 发表于 2009-5-4 19:41

%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)%输出识别结果

skater_girl 发表于 2009-5-4 19:45

就是训练老是出问题,为什么啊?麻烦你们看看,救救小女子吧!
见截图:

lwp6941492 发表于 2009-5-5 16:43

同学,那个bmp文件怎么做的,有现成的没,谢谢.

qi502 发表于 2011-5-20 00:45

这是什么书,这么牛,我在坐这个毕设,能给我发一份不
页: [1]
查看完整版本: 【神经网络模型及其MATLAB仿真程序设计】书上的数字识别问题,紧急求助!