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

来源:互联网 发布:淘宝是日本人投资的吗 编辑:程序博客网 时间:2024/06/01 09:25

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

f = @(x)1./(1+exp(-x));df=@(x)f(x).*(1-f(x));delta=@(x, y)x==y;% net configalpha = 4;w = rand(3, 6)*2 - 1;p1 = zeros(3, 6);p2 = p1;p3 = p2;% feedforwardx = 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%testx = 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));endcount


0 0
原创粉丝点击