感知器简单分类

考虑一个简单的分类问题:设计一个感知器,将二维的四组输入矢量分成两类matlab2016a实现:输入矢量P=[-0.5 -0.5 0.3 0;-0.5 0.5 -0.5 1]目标矢量T=[1.0 1.0 0 0]

P=[-0.5 -0.5 0.3 0;-0.5 0.5 -0.5 1]
T=[1 1 0 0]
%初始化,确定R S Q
[R,Q]=size(P)
[S,Q]=size(T)
[W]=rands(S,R)
b=rand();
max_epoch=20
B=cat(2,b,b,b,b)
A=hardlim(W*P+B)
%上条命令是,第一次求网络输出,接下来为网络循环训练,修正权值的过程:
%学习
for epoch=1:max_epoch
    if all (A==T)
        epoch=epoch-1
        break
    end
 e=T-A;
 dW=learnp([],P,[],[],[],[],e,[],[],[],[],[]);
 %求权值的修正值,矢量矩阵表示为误差矩阵E乘以输出矩阵的转置,即(t-a)*p
 db=learnp(b,ones(1,S),[],[],[],[],e,[],[],[],[],[]);
 %求偏差的修正值,矢量矩阵表示为误差矩阵E,即(t-a)*1
 W=W+dW;
 B=B+db;
 %修正后的偏差和权值
 A=hardlim(W*P+B);
 %计算权值修正后的网络输出
end
A

解法二:

猜你喜欢

转载自blog.csdn.net/u014712806/article/details/82814474