%--------------------------------------------------------------------% 感知器算法
%--------------------------------------------------------------------
load('template.mat');
img=imread('untitled.bmp');%读入测试图像
feature=Getfeature(img);%提取测试样本特征
w = zeros(10,26);%10个类别的增广权值
d = zeros(1,10);%迭代过程中判别函数计算结果
x = zeros(1,26);%增广样本,前25维为样本特征,第26维为1
hx = zeros(1,10);%测试样本判别函数计算结果
c =0;%迭代次数
flag=0;%标志符(只使用0,1)%%%%%%%%%% Begin %%%%%%%%%%% 用全部训练样本迭代训练(使用梯度下降法,迭代结束求出10个类别的权矢量存入w(10,26)中)while~flag
flag =1;for n =1:10for i =1:pattern(n).num
%依次读取训练样本
x = pattern(n).feature(i,:);
x(26)=1;for j =1:10%%%%%%%%%% Begin %%%%%%%%%%%计算判别函数值d(j)
d(j)=w(j,:)*x';%%%%%%%%%% End %%%%%%%%%%
end
%判断d(n)是否是最大值
if d(n)~=max(d)||max(d)==min(d)%%%%%%%%%% Begin %%%%%%%%%%%d(n)不是最大值,修正权矢量w
for k=1:10if k==n
w(k,:)=w(k,:)+x;else
w(k,:)=w(k,:)-x;
end
end
%%%%%%%%%% End %%%%%%%%%%
flag=0;%将标志符置为0
end
end
end
c = c+1;if(c>500)%迭代超过500次停止
break
end
end
%%%%%%%%%% End %%%%%%%%%%% 测试样品
num = feature;
num(26)=1;% 计算判别函数
for n =1:10
hx(n)= w(n,:)*num';
end
[tem,num]=max(hx);%找到其中的最大值
num = num-1;str= num2str(num);str=['应用感知器算法识别结果:'str];
fprintf('%s\n',str);