您的位置:首页 > 理论基础 > 计算机网络

使用回馈式神经网络实现一个XOR的非线性分类

2014-09-17 10:31 507 查看
不多说了,说多了都是泪,用矩阵写法死活出错。无奈只好for循环来写了。delay为1步,实现对上一个xor的预测分析。测试效果基本达到100%。看代码吧:

f = @(x)1./(1+exp(-x));
df=@(x)f(x).*(1-f(x));
delta=@(x, y)x==y;
% net config
alpha = 4;
w = rand(3, 6)*2 - 1;
p1 = zeros(3, 6);
p2 = p1;
p3 = p2;
% feedforward
x = randi([0, 1], 2, 1);
t = xor(x(1), x(2));
y = zeros(3, 1);
z = [1; x; y];
s = w*z;
y = f(s);
for i = 1:1000
x = randi([0, 1], 2, 1);
z = [1; x; y];
s = w*z;
y = f(s);
for j = 1:3
for k = 1:6
q1=df(s(1))*(w(1,4)*p1(j,k) + w(1,5)*p2(j,k) + w(1,6)*p3(j,k) + delta(1,j)*z(k));
q2=df(s(2))*(w(2,4)*p1(j,k) + w(2,5)*p2(j,k) + w(2,6)*p3(j,k) + delta(2,j)*z(k));
q3=df(s(3))*(w(3,4)*p1(j,k) + w(3,5)*p2(j,k) + w(3,6)*p3(j,k) + delta(3,j)*z(k));
p1(j,k)=q1;
p2(j,k)=q2;
p3(j,k)=q3;
end
end
e = t - y(3);
w = w + alpha*e*p3;
t = xor(x(1), x(2));
end

%test
x = randi([0, 1], 2, 1);
y = zeros(3, 1);
z = [1; x; y];
s = w*z;
y = f(s);
t = xor(x(1), x(2));
count = 0;
for i = 1:1000
x = randi([0, 1], 2, 1);
z = [1; x; y];
y = f(w*z);
if y(3) >= 0.5
if t == 1
count = count+1;
end
else
if t == 0
count = count+1;
end
end
t = xor(x(1), x(2));
end
count
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐