📄 代码25-1.txt
字号:
clear memory % 清理内存
clear all % 清理MATLAB工作空间
clc % 清除历史命令字符
nump=3; % 类的数目
n=3; % 每类的图像数目,图像变形成P中的列元素,图像尺寸(3x3)变成(1x9),训练图像
P=[196 35 234 232 59 244 243 57 226; ...
188 15 236 244 44 228 251 48 230; ... % 类1
246 48 222 225 40 226 208 35 234; ...
255 223 224 255 0 255 249 255 235; ...
234 255 205 251 0 251 238 253 240; ... % 类2
232 255 231 247 38 246 190 236 250; ...
25 53 224 255 15 25 249 55 235; ...
24 25 205 251 10 25 238 53 240; ... % 类3
22 35 231 247 38 24 190 36 250]'; % 测试图像
N=[208 16 235 255 44 229 236 34 247; ...
245 21 213 254 55 252 215 51 249; ... % 类1
248 22 225 252 30 240 242 27 244; ...
255 241 208 255 28 255 194 234 188; ...
237 243 237 237 19 251 227 225 237; ... % 类2
224 251 215 245 31 222 233 255 254; ...
25 21 208 255 28 25 194 34 188; ...
27 23 237 237 19 21 227 25 237; ... % 类3
24 49 215 245 31 22 233 55 254]'; % 标准化
P=P/256;
N=N/256;
figure(1),
for i=1:n*nump
im=reshape(P(:,i), [3 3]);
im=imresize(im,20); % 调整图像尺寸使其看起来清晰
subplot(nump,n,i),imshow(im);title(strcat('Train image/Class #', int2str(ceil(i/n))))
end
figure,
for i=1:n*nump
im=reshape(N(:,i), [3 3]);
im=imresize(im,20); %调整图像尺寸使其看起来清晰
subplot(nump,n,i),imshow(im);title(strcat('test image #', int2str(i)))
end
% 目标
T=[ 1 1 1 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1 ];
S1=5; % 隐藏层的数目
S2=3; % 输出层的数目(=类的数目)
[R,Q]=size(P);
epochs = 10000; %反复次数
goal_err = 10e-5; % 目标误差
a=0.3; % 定义随机变量范围
b=-0.3;
W1=a + (b-a) *rand(S1,R); % 输入和隐藏神经元间的权重
W2=a + (b-a) *rand(S2,S1); % 输出和隐藏神经元间的权重
b1=a + (b-a) *rand(S1,1); % 输入隐藏神经元间的权重
b2=a + (b-a) *rand(S2,1); % 隐藏和输出神经元间的权重
n1=W1*P;
A1=logsig(n1);
n2=W2*A1;
A2=logsig(n2);
e=A2-T;
error =0.5* mean(mean(e.*e));
nntwarn off
for itr =1:epochs
if error <= goal_err
break
else
for i=1:Q
df1=dlogsig(n1,A1(:,i));
df2=dlogsig(n2,A2(:,i));
s2 = -2*diag(df2) * e(:,i);
s1 = diag(df1)* W2'* s2;
W2 = W2-0.1*s2*A1(:,i)';
b2 = b2-0.1*s2;
W1 = W1-0.1*s1*P(:,i)';
b1 = b1-0.1*s1;
A1(:,i)=logsig(W1*P(:,i),b1);
A2(:,i)=logsig(W2*A1(:,i),b2);
end
e = T - A2;
error =0.5*mean(mean(e.*e));
disp(sprintf('Iteration :%5d
mse(itr)=error;
end
end
threshold=0.9;
% 训练图像结果
TrnOutput=real(A2>threshold)
% 将测试图像应用到神经网络
n1=W1*N;
A1=logsig(n1);
n2=W2*A1;
A2test=logsig(n2);
% 测试图像结果
TstOutput=real(A2test>threshold)
% 识别率
wrong=size(find(TstOutput-T),1);
recognition_rate=100*(size(N,2)-wrong)/size(N,2)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -