📄 zuoyenew.asv
字号:
clc
clear
close all
%---------------------------------------------------
for j=1:10
% 产生训练样本
for i=1:10
filename1 = strcat(num2str(j-1),' (',num2str(i),').bmp');
pt1 = im2double(rgb2gray(imread(filename1)));
P1 = reshape(pt1,1,39*39);
T1 = repmat([j-1],1,39*39);
%repmat 产生m*n个矩阵a所组成的矩阵repmat(a,m,n)
%---------------------------------------------------
% 设置网络参数
NodeNum = 78; % 隐层节点数
TypeNum = 1; % 输出维数
TF1 = 'tansig';TF2 = 'purelin'; % 判别函数(缺省值)
net = newff(minmax(P1),[NodeNum TypeNum],{TF1 TF2});
net.trainParam.show = inf; % 训练显示间隔
net.trainParam.lr = 0.3; % 学习步长 - traingd,traingdm
net.trainParam.mc = 0.95; % 动量项系数 - traingdm,traingdx
net.trainParam.mem_reduc = 10; % 分块计算Hessian矩阵(仅对Levenberg-Marquardt算法有效)
net.trainParam.epochs = 50; % 最大训练次数
net.trainParam.goal = 1e-20; % 最小均方误差
net.trainParam.min_grad = 1e-20; % 最小梯度
net.trainParam.time = inf; % 最大训练时间
%---------------------------------------------------
% 训练
net = train(net,P1,T1); % 训练
end
n{1,j} = net; %保存网络
%---------------------------------------------------
% 训练样本测试
Y1 = sim(net,P1); % 训练样本实际输出
y1(j,:) = Y1;
% 结果统计1
MSE1(j) = mse(T1-Y1) %均方误差
Result1(j) = 1-sum(abs(T1-Y1)) % 正确分类显示为1
%---------------------------------------------------
end
% 测试样本测试
right = 0;
false = 0;
for jj=1:10
for ii=1:10
filename2 = strcat(num2str(jj-1),' (',num2str(ii),')t.bmp');
pt2 = im2double(rgb2gray(imread(filename2)));
P2 = reshape(pt2,1,39*39);
T2 = repmat([jj-1],1,39*39);
Y2 = sim(n{1,jj},P2);
y2(jj,ii)= Y2(1,1);
% 结果统计2
MSE2(jj,ii) = mse(T2-Y2) %均方误差
%Result2(jj,ii) = 1-sum(abs(T2-Y2)) % 正确分类显示为1
if (sum(abs(Y2(1,1)-(jj-1))))<0.001
right = right + 1;
else
false = false + 1;
end
end
end
['结果输出:']
y2
['测试正确识别率:',num2str(right/(right+false))]
%---------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -