基于感知器算法的手写数字识别matlab实现

基于感知器算法的手写数字识别

% --------------------------------------------------------------------
% 感知器算法
% --------------------------------------------------------------------
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;%标志符(只使用01)


%%%%%%%%%% Begin %%%%%%%%%%
%   用全部训练样本迭代训练(使用梯度下降法,迭代结束求出10个类别的权矢量存入w(10,26))
while ~flag
    flag = 1;
    for n = 1:10
        for 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:10
                if 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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

happylife_mini

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值